我刚刚在我正在处理的项目中重新定义了冲突,并且在追查为什么它没有在所有平台上发生(结果是包含顺序)时,我偶然发现了以下我无法解释的行为。
1. 编译没有警告
#define LIST_HEAD(a) { int a = 0; }
#include <sys/queue.h>
int main() {
return 0;
}
2.“宏重新定义”警告
#include <sys/queue.h>
#define LIST_HEAD(a) { int a = 0; }
int main() {
return 0;
}
我希望这两种情况都会产生警告,因为没有检查<sys/queue.h>
会阻止重新定义。
那么为什么第一种情况没有警告,而第二种情况呢?我在这里缺少什么?
顺便说一句:我在我的 Mac 上用 clang 和我的 Linux 机器上用 gcc 得到了相同的结果。