仅使用1个参数定义

时间:2012-03-13 16:34:47

标签: c

我正在阅读外部C代码,我找到了以下代码行:

#define __MAIN_C__

其中#define只有一个"参数" (即__MAIN_C__)。

这只是一个占位符,还是它有功能?

4 个答案:

答案 0 :(得分:3)

#define会将__MAIN_C__ 定义为无值(感谢n.m.和一个简单的测试程序)。当你不关心它所定义的内容时,你需要#define d这是一个捷径。在这种情况下,在代码中的某个地方,您可能只看到:

#ifdef __MAIN_C__

这并不关心它具有什么特定价值,只要它被定义(也许是非零)。

您经常会在include guards看到这个,就像这样:

#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;
}

答案 1 :(得分:1)

是的,这可以完成一些事情。如果你看,有一个相当不错的机会,你可以找到类似于:#ifdef __MAIN_C__的地方 - 这只是检查符号是否已被定义,无论给定的值(如果有的话)。

答案 2 :(得分:1)

在这种情况下,定义只需设置 MAIN_C 。没有赋值,但预处理器会将 MAIN_C 插入为“true”。通常,这些定义用于在编译之前包含或排除代码,使用类似下面的内容:

#define WIN32

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

#endif

答案 3 :(得分:0)

这个定义使__MAIN_C__扩展(粗略地说)为零。

可能的用途:

#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[]) {