警告:ISO C禁止空的翻译单元。

15
在头文件中,我有以下代码,在尝试链接时给我标题中的错误。
#ifndef BOOLEAN_H
#define BOOLEAN_H

#ifndef FALSE
#define FALSE 0
#endif

#ifndef TRUE
#define TRUE !FALSE
#endif

#endif

指示错误发生在最后一个#endif所在的行。


4
为什么要尝试编译头文件? - mafso
1
@mafso:编译器会检查很多东西,不仅仅是生成机器代码。这有助于检测拼写错误、遗漏等问题。 - phs
1个回答

33

gcc编译时使用-pedantic选项,当翻译单元为空时会报告一条警告信息,因为这是C标准所要求的。为了让gcc满意,您可以在空的.c文件中添加一个虚拟typedef

typedef int make_iso_compilers_happy;
或者
extern int make_iso_compilers_happy;

7
我很愿意知道为什么ISO C禁止空翻译单元。 - Ayxan Haqverdili
如果它是一个头文件,那么它怎么成为翻译单元呢? - creanion
@creanion,如果你编译一个文件,它就是一个翻译单元。扩展名并不重要。所以,例如,如果你执行 gcc -c foo.h - wovano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接