c - 多个应用程序头文件在 C 中包含错误

标签 c linux ubuntu gcc integrity

我正在做一个从 INTEGRITY OS 到 UBUNTU 的移植项目。面临编译器错误,如下所述。即使没有在 INTEGRITY OS 中编译,我认为那里没有错误。
我找到了根本原因。我期待解决方案如何实现这一目标。main.c

#include "file1.h"
#include "file2.h"
#include "file3.h"
.
.
.
在所有文件中file1.hfile3.h下面是每个文件的开头。
#ifdef INC_HEADER_FILE
    #error Multiple header files included.
#endif
#define INC_HEADER_FILE
.
.
.
以上在编译时抛出错误
In file included from ../main.c:
../file1.h: error: #error Multiple application header files included.
 #   error Multiple application header files included.
    ^~~~~
file1.h 的所有文件都抛出相同的错误至file3.h

最佳答案

如果这些头文件中的所有三个(或有多少个)都使用相同的符号 INC_HEADER_FILE ,那么您将只能包含其中之一。
那是因为包括(例如)file1.h将设置该符号,这意味着包含下一个 header 会提示,因为它已经定义了。
包含保护符号通常特定于头文件本身,例如 INC_HEADER_1_FILE但这不是我的必要 - 当你只想要一个头文件的变体时,我已经看到了这种事情。
一个例子是我为 LED 显示设备工作的系统,其中每个接头都有不同的尺寸。这些是由 8x8 单元构成的,但上下数量不同。将 LED 寻址映射放在头文件中可以提高动态配置所不具备的效率,并且包含保护确保我们不会尝试使用多个映射。

关于c - 多个应用程序头文件在 C 中包含错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63026910/

相关文章:

c - 这 3 行 C 代码到底做了什么?

c - c 中不寻常的结构

java - 强制 Java2D 子像素抗锯齿

java - Ubuntu:SWT 应用程序无法加载 GTK 库

ubuntu - 32位系统安装64位glib2进行交叉编译

c - 使用 gtk c++ 更新多个进度条

c - 二维数组增量

linux - 容器以特权模式运行

r - 找不到 -l<library> R

ubuntu - HAProxy 通过 ip 范围限制单个后端