我正在做一个从 INTEGRITY OS 到 UBUNTU 的移植项目。面临编译器错误,如下所述。即使没有在 INTEGRITY OS 中编译,我认为那里没有错误。
我找到了根本原因。我期待解决方案如何实现这一目标。main.c
#include "file1.h"
#include "file2.h"
#include "file3.h"
.
.
.
在所有文件中file1.h
至file3.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/