我正在调试一个非常大的项目,我在一个文件中添加了:“file_1.c”
另一个文件的包含语句#include“header_2.h”
。我遇到了 2 个编译错误:
error (dcc:1633): parse error near '100' (Built from Project 'project_3')
error (dcc:1100): member is incomplete (Built from Project '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 文件中,并且没有给我带来任何问题。
我认为这里的情况可能是循环包含,但我检查了标题,那里有包含防护。一旦我删除了包含,解析错误就消失了,编译运行正常(因为包含是为我删除的一些代码片段植入的)。
我还检查了实际的包含行(在 file_1.c 中)以查看是否存在解析错误,但没有。
什么可能导致此问题以及我该如何处理?
注意: header 本身没有错误。它包含在其他 c 文件中并且没有显示任何错误。此外,如果没有这个特定的包含,编译器运行良好。
最佳答案
可能导致问题的 header 包含类似的内容
#define A 100
这改变了标记A
的含义。
只有当 header 中定义的宏被无意地用在另一个文件中时,才会导致问题;就其本身而言, header 和其他文件没有问题。
关于c - 由于包含好文件而导致的解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41137221/