Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我在a.h中使用预处理警告时,如何避免来自gcc的多个警告_C_Gcc_C Preprocessor - Fatal编程技术网

当我在a.h中使用预处理警告时,如何避免来自gcc的多个警告

当我在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包含在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 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在寻找某种预处理器的魔力。如果是,“你不能”。