【发布时间】:2015-04-08 11:41:11
【问题描述】:
我有以下文件:
Main.c
#include "Header.h"
#define SECRET_NUMBER_ENABLED
int main()
{
printf("Secret number = %d\n", SECRET_NUMBER);
return 0;
}
Header.h
#ifdef SECRET_NUMBER_ENABLED
#define SECRET_NUMBER 111
#else
#define SECRET_NUMBER 222
#endif
打印结果为:222
据我了解,预处理器应该扫描 Main.c 并将每个 SECRET_NUMBER 替换为 Header.h 中定义的数字,
因为 SECRET_NUMBER_ENABLED 是在 Main.c 中定义的,所以预处理器应该采用 111 定义而不是 222。
显然我错了,但我不知道为什么,也不知道如何正确设置它,所以只有具有#define SECRET_NUMBER_ENABLED 的 C 文件才会使用 SECRET_NUMBER 111
【问题讨论】:
-
您是否尝试将
#define SECRET_NUMBER_ENABLED放在#include之前? -
是的,结果相同,尽管我收到编译警告:警告 C4603: 'SECRET_NUMBER_ENABLED' : 未定义宏或使用预编译头文件后定义不同
-
我的完整代码包含以下内容:#include "stdafx.h" #include "Header.h" 当我将定义放在它们之间时它可以工作,当我将定义放在 2 包含 i 之前收到上面的警告,还是不行,能解释一下原因吗?
-
我有一个愚蠢的评论,但怎么知道...您是否检查过为定义
SECRET_NUMBER_ENABLED分配不同的名称?也许在 stdafx.h 或其依赖项中有一个具有该名称的定义 -
是的,我检查了一个不同的名称,仍然不起作用。
标签: c-preprocessor