我正在调试一个非常大的项目,我在一个文件中添加了"file_1.c"
另一个文件#include "header_2.h"
的include语句。我有2个编译错误:
错误(dcc:1633):在'100'附近解析错误(从项目'project_3'构建)
错误(dcc:1100):成员不完整(从项目'project_3'构建)
但是错误的位置没有意义,因为那里的代码是typedef的一部分:
typedef struct
{
unsigned char A:1, // <- first error here (dcc:1633)
B:1,
C:6;
}TYPE_A;
typedef struct
{
TYPE_A D; // <- second error here (dcc:1100)
TYPE_B E;
TYPE_C F;
}FOO_T;
现在,此标头header_2.h
已包含在其他c文件中,并且没有给我任何问题。
我认为这里的情况可能是循环包括,但我检查了标题,那里有警卫。一旦我删除了include,解析错误就消失了,编译运行正常(因为我已经删除了包含的部分代码)。
我还检查了实际的include行(在file_1.c中),看看是否有解析错误,但是没有。
什么可能导致这个问题,我应该如何处理?
注意:标题本身没有错误。它包含在其他c文件中,并显示没有错误。此外,如果没有这个特定的包含,编译器运行正常。
答案 0 :(得分:2)
导致问题的标题可能包含类似
的内容#define A 100
更改了令牌A
的含义。
如果标头中定义的宏无意中在另一个文件中使用,那么这只会导致问题;标题和其他文件本身没有问题。