我遇到了一个奇怪的情况。我的理解是,如果我将#ifndef #define #endif 标志放在所有.h 文件中,则包含头文件的顺序并不重要。
老代码啊
#ifndef A_H
#define A_H
blah blah blah
#endif
cc
#include "a.h"
blah blah blah
以上代码运行良好。
现在我添加了一个新的标题 bh
bh
#ifndef B_H
#define B_H
blah blah blah
#endif
新的.cc
#include "a.h"
#include "b.h"
blah blah blah
上面的a.cc编译好了。但是,如果我将 a.cc 更改为
新的 a.cc 版本 2
#include "b.h"
#include "a.h"
blah blah blah
编译失败并出现错误:“-”标记之前的预期 unqualified-id。
抱歉,我无法在一个小示例中重现相同的错误。编译错误导致了一个大项目。如果我在上面创建的一个小例子中进行测试。它已编译,但如果我切换回项目。#include 指令顺序确实很重要。我不知道这个问题可能发生在哪里。任何人都可以给我一个线索会很有帮助。提前致谢
[已解决] 我自己解决了这个问题。然而,我认为可能还有其他人也坚持下去。导致问题的原因如下
在 test.cc 中
const int var_undef = -1;
#define var_undef (-1)
它编译,而如果你交换这两行
#define var_undef (-1)
const int var_undef = -1
正如我所说,它在“-”标记之前使用错误预期的 unqualified-id 进行编译。