我希望你是好的。我有一个文件version.h包含在5 files.c。当我编译我有5个警告:
版本.h:10:2:警告:--子版本2
版本.h:10:2:警告:--子版本2
版本.h:10:2:警告:--子版本2
版本.h:10:2:警告:--子版本2
版本.h:10:2:警告:--子版本2
我只想有一个警告。我在一些网站上看了一段时间,我没有发现任何关于这个问题。如何避免这个问题?
这里是my .h,my .c是随机数:
#ifndef _VERSION_H
#define _VERSION_H
#define SUB_VERSION 1
#define SUB_VERSION SUB_VERSION2
#if (SUB_VERSION == SUB_VERSION2)
#ifndef WARNING_SUB_VERSION
#define WARNING_SUB_VERSION
#warning -- SUB_VERSION2
#endif
#endif
#endif
#endif
3条答案
按热度按时间c0vxltue1#
你不能。逻辑上,每个
.c
文件都是独立于其他文件编译的。这意味着你不能从一个文件中包含的头文件发出警告,而在其他文件中隐藏它。mhd8tkvw2#
解决方法是将. h版分割为. h版和. c版。
版本.h文件:
版本.c文件:
version.c文件只编译一次。由于头文件中不再有警告,因此警告总数减少为一个。
j0pj023g3#
假设你的头文件有一个适当的多重包含保护,那么你的多个警告一定是由编译多个翻译单元(大致来说,来自不同的C源文件)引起的。每个翻译单元都是独立编译的,所以多个警告是意料之中的。
通过将所有源代码合并到一个翻译单元中,可以将警告的数量减少到一个,但我并不特别推荐这样做。
还有其他与代码结构相关的可能性,比如使用宏和附加的预处理器条件来指定特定的翻译单元--可能是包含
main()
的翻译单元--作为发出警告的翻译单元。但是,这种方法很脆弱,我也不推荐使用。您最好的选择可能是接受多个警告或完全抑制它们。