当我在a.h中使用预处理警告时,如何避免来自gcc的多个警告
我希望你身体好。 我有一个文件版本。h包含在5个文件中。c。 编译时,我有5个警告: 版本h:10:2:警告:-子版本2当我在a.h中使用预处理警告时,如何避免来自gcc的多个警告,c,gcc,c-preprocessor,C,Gcc,C Preprocessor,我希望你身体好。 我有一个文件版本。h包含在5个文件中。c。 编译时,我有5个警告: 版本h:10:2:警告:-子版本2 版本h:10:2:警告:-子版本2 版本h:10:2:警告:-子版本2 版本h:10:2:警告:-子版本2 版本h:10:2:警告:-子版本2 我只想得到一个警告。我已经在某个网站上浏览了一段时间,但我没有发现关于这个问题的任何信息。如何避免这个问题 这是我的.h,我的.c是随机的: #ifndef _VERSION_H #define _VERSION_H #define
版本h:10:2:警告:-子版本2
版本h:10:2:警告:-子版本2
版本h:10:2:警告:-子版本2
版本h:10:2:警告:-子版本2 我只想得到一个警告。我已经在某个网站上浏览了一段时间,但我没有发现关于这个问题的任何信息。如何避免这个问题 这是我的.h,我的.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
你不能。从逻辑上讲,每个
.c
文件都是独立于其他文件编译的。这意味着您不能从一个文件中包含的头文件发出警告,而在其他文件中禁止发出警告。您不能。从逻辑上讲,每个.c
文件都是独立于其他文件编译的。这意味着您不能从一个文件中包含的头文件发出警告,而在其他文件中禁止发出警告。如果您的头文件具有适当的多重包含保护,那么您的多重警告必须来自多个翻译单元的编译(大致上来自单独的C源文件)。每个翻译单元都是独立编译的,因此可能会出现多个警告
通过将所有源代码合并到一个翻译单元中,您可能会将警告的数量减少到一个,但我并不特别推荐这样做
还有其他与代码结构相关的可能性,例如使用宏和附加的预处理器条件来指定特定的转换单元(可能是包含main()
)的单元),作为发出警告的单元。然而,像这样的方法是脆弱的,我也不推荐它们
您最好的选择可能是使用多个警告,也可能是完全抑制它们。鉴于您的标题具有适当的多包含保护,您的多个警告必须来自多个翻译单元的编译(大致上来自单独的C源文件)。每个翻译单元都是独立编译的,因此可能会出现多个警告 通过将所有源代码合并到一个翻译单元中,您可能会将警告的数量减少到一个,但我并不特别推荐这样做 还有其他与代码结构相关的可能性,例如使用宏和附加的预处理器条件来指定特定的转换单元(可能是包含
main()
)的单元),作为发出警告的单元。然而,像这样的方法是脆弱的,我也不推荐它们
您最好的选择可能是接受多个警告,也可能是完全抑制这些警告。您的诊断显然是正确的,但“您不能”的结论必须依赖于一些未说明的假设,即应该考虑哪种解决方案。谢谢您的反馈。你对解决我的问题有什么建议吗?我的假设是OP不想改变多个.c文件都包含同一个.h文件的情况。如果OP准备改变这一点(如你的回答),那么事情就会改变。然而,我感觉OP在寻找某种预处理器的魔力。如果是这样的话:“你不能”。你的诊断显然是正确的,但“你不能”的结论必须依赖于一些未陈述的假设,即应该考虑什么样的解决方案。谢谢你的反馈。你对解决我的问题有什么建议吗?我的假设是OP不想改变多个.c文件都包含同一个.h文件的情况。如果OP准备改变这一点(如你的回答),那么事情就会改变。然而,我感觉OP在寻找某种预处理器的魔力。如果是,“你不能”。