Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 仅使用1个参数定义_C - Fatal编程技术网

C 仅使用1个参数定义

C 仅使用1个参数定义,c,C,我正在阅读外部C代码,发现以下代码行: #define __MAIN_C__ 其中define只给出一个参数,即uu MAIN_C_u 这仅仅是一个占位符,还是它可以有一个函数?该函数将定义“MAIN\u C\uuuu”为无值,这要归功于n.m.和一个简单的测试程序。这是一条捷径,当你需要定义的东西,而你不在乎它被定义为什么。在这种情况下,在代码的某个地方,您可能会看到: #ifdef __MAIN_C__ 这不在乎它有什么具体的值,只要它是定义的,也许是非零的 你经常会看到这样的情况,比如

我正在阅读外部C代码,发现以下代码行:

#define __MAIN_C__
其中define只给出一个参数,即uu MAIN_C_u

这仅仅是一个占位符,还是它可以有一个函数?

该函数将定义“MAIN\u C\uuuu”为无值,这要归功于n.m.和一个简单的测试程序。这是一条捷径,当你需要定义的东西,而你不在乎它被定义为什么。在这种情况下,在代码的某个地方,您可能会看到:

#ifdef __MAIN_C__
这不在乎它有什么具体的值,只要它是定义的,也许是非零的

你经常会看到这样的情况,比如:

#ifndef MYHEADER_H
#define MYHEADER_H

// stuff here

#endif
这类似于在编译标志中执行此操作:

gcc -D__MAIN_C__ main.c
如果您希望看到它的定义为空,请尝试编译它并观察它失败:

#include <stdio.h>

#define TEST

int main(int argc, char *argv[])
{
    printf("%d\n", TEST);
    return 0;
}
由于n.m.和一个简单的测试程序,该定义将把uuu MAIN_uc_uuuu定义为无值。这是一条捷径,当你需要定义的东西,而你不在乎它被定义为什么。在这种情况下,在代码的某个地方,您可能会看到:

#ifdef __MAIN_C__
这不在乎它有什么具体的值,只要它是定义的,也许是非零的

你经常会看到这样的情况,比如:

#ifndef MYHEADER_H
#define MYHEADER_H

// stuff here

#endif
这类似于在编译标志中执行此操作:

gcc -D__MAIN_C__ main.c
如果您希望看到它的定义为空,请尝试编译它并观察它失败:

#include <stdio.h>

#define TEST

int main(int argc, char *argv[])
{
    printf("%d\n", TEST);
    return 0;
}

是的,这可以完成一些事情。如果你仔细看,很有可能你会在某处找到类似的东西:ifdef u MAIN u C u u u u u u u-这只是检查符号是否已定义,而不管给定了什么值。

是的,这可以完成一些事情。如果你看一下,很有可能你会在某处找到类似的东西:ifdef u MAIN u C uu u u u u u u u u u u u u u u u u u u u-这只是检查符号是否已定义,而不管给定了什么值。

在这种情况下,define只。通常,类似于这些的定义用于在编译之前包含或排除代码,使用类似以下的方式:

#define WIN32

#ifdef WIN32
//some win32-specific code
#else
//some other code

#endif

在这种情况下,define只是设置MAIN_C。没有赋值,但预处理器会将MAIN_C解释为true。通常,类似于这些的定义用于在编译之前包含或排除代码,使用类似以下的方式:

#define WIN32

#ifdef WIN32
//some win32-specific code
#else
//some other code

#endif
这个定义使得uuu MAIN u C_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

可能的用途:

#ifdef __MAIN_C__
foo(bar);
#endif
另一个:

#ifdef PLAIN_OLD_OS
#define __MAIN_C__
#else
#define __MAIN_C__ __os_specific_attribute(dllsomething)
#endif

__MAIN_C__ int main (int argc, char* argv[]) {
这个定义使得uuu MAIN u C_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

可能的用途:

#ifdef __MAIN_C__
foo(bar);
#endif
另一个:

#ifdef PLAIN_OLD_OS
#define __MAIN_C__
#else
#define __MAIN_C__ __os_specific_attribute(dllsomething)
#endif

__MAIN_C__ int main (int argc, char* argv[]) {

您可能需要阅读更多关于的内容。应该注意的是_umain_C_uuu不是应用程序要使用的合法标识符。它是为实现保留的。@R..:您能提供更多详细信息吗?应用程序代码不能使用以两个下划线或一个下划线后跟大写字母开头的标识符。它们保留供C实现内部使用,例如在标准库标题中。您可能需要阅读更多关于的内容。应该注意的是,_umain_C_uu不是应用程序要使用的合法标识符。它是为实现保留的。@R..:您能提供更多详细信息吗?应用程序代码不能使用以两个下划线或一个下划线后跟大写字母开头的标识符。它们保留供C实现内部使用,例如在标准库标题中使用。@n.m.谢谢,刚刚验证过-它字面上定义为“无”,但仍定义为“无”。如果在代码中使用,它将替换为空白。但是,预处理器会将任何ifdef或类似语句的值解释为true。执行此操作时,是否会占用内存空间?如果是的话,需要多少?不需要。所有的预处理器指令都是在编译之前处理的。如果某个东西被编译为空,它通常会被优化掉。@n.m.谢谢,刚刚验证过-它字面上定义为空,但仍然定义为空。如果在代码中使用,它将被替换为空空间。但是,预处理器会将任何ifdef或类似语句的值解释为true。执行此操作时,是否会占用内存空间?如果是的话,需要多少?不需要。所有的预处理器指令都是在编译之前处理的。如果某个东西被编译成空的,它通常会得到优化。我知道。在我发布并更正它之后,我马上意识到了这一点。接得好,我知道。在我发布并更正它之后,我马上意识到了这一点。抢手货