c - 由于包含好文件而导致的解析错误

标签 c parsing compiler-errors include

我正在调试一个非常大的项目,我在一个文件中添加了:“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/

相关文章:

c - 无法使用 SPI 将 beaglebonegreen 与 mcp3008 连接

linux - 如何在 Linux 中使用单行命令获取 Java 版本

javascript - 如何使用 JSON.parse() 显示正确的值?

ios - 在 Cordova iOS 包中找不到 `OBJROOT="$OBJROOT"` 来尝试修复构建错误 : xcodebuild: Command failed with exit code 65

c++ - 对重载函数的模棱两可调用(常量变体)

c - 如何正确识别C中的不同行尾?

c - G-WAN中如何用C实现原子操作

c - 如何测试指针是否在数组内?

swift - 我有字典数组类型的 JSON 数据。如何使用 Codable 协议(protocol)对其进行解码?

Java 异常 IOException 永远不会在相应的 try 语句主体中抛出?