抑制GCC警告“;“包含指令”末尾的额外标记;

抑制GCC警告“;“包含指令”末尾的额外标记;,c,gcc,warnings,compiler-warnings,gcc-warning,C,Gcc,Warnings,Compiler Warnings,Gcc Warning,我正在用C编写一个程序,打算在HP NonStop机器上编译和运行。但是,我想在运行Linux的工作站上进行主要开发。HP NonStop C编译器需要非标准的#include指令,如下所示: #include <stdio.h> nolist 如何抑制此特定警告 注:在这一点上,已经提出了类似的问题,正确答案是“首先不要给gcc任何抱怨的理由”。然而,在这个场景中,我明确地希望#include指令与它们完全一样 我知道我在做什么,只是不知道如何通知gcc。一种解决方法是定义包含以

我正在用C编写一个程序,打算在HP NonStop机器上编译和运行。但是,我想在运行Linux的工作站上进行主要开发。HP NonStop C编译器需要非标准的#include指令,如下所示:

#include <stdio.h> nolist
如何抑制此特定警告

注:在这一点上,已经提出了类似的问题,正确答案是“首先不要给gcc任何抱怨的理由”。然而,在这个场景中,我明确地希望#include指令与它们完全一样


我知道我在做什么,只是不知道如何通知gcc。

一种解决方法是定义包含以下预处理宏的标题:

//hp_workaround.h
#ifdef HP_
#define HP_INCLUDE_DIRECTIVE(x) x
#else
#define HP_INCLUDE_DIRECTIVE(x) 
#endif
然后用这个宏保护您的指令

#include "hp_workaround.h"
#include <stdio.h> HP_INCLUDE_DIRECTIVE(nolist)
#包括“hp_workaround.h”
#包含HP_包含_指令(nolist)

在include中进行宏扩展可能会有所帮助

GCC将接受这一点:

#define nolist
#include <stdlib.h> nolist
/* maybe #undef nolist here */
#定义nolist
#包括nolist
/*也许这里没有定义*/

I's vote to close as duplicate的可能重复-在这个场景中确实有很多问题,包括关于如何抑制警告的具体答案,而不仅仅是“首先不要给gcc任何抱怨的理由”。其他问题的可能重复涉及通过
-Wblah
标志系列打开和关闭警告,根据
cpp
-Wall
选项的说明,这在这种情况下不适用:“请注意,预处理器的许多警告在默认情况下处于打开状态,并且没有控制它们的选项。“所以,这毕竟不是一个重复。我在回答了一个有点相关的问题后,发现了这个问题。如果您可以使用
clang
,就我所知,它支持
-Wno额外令牌
,这将是一个干净的解决方案。我更希望通过使用
-Wsuppress extra-tokens warning
之类的方法禁用GCC警告,但这个解决方案似乎是下一个最好的解决方案。谢谢
#define nolist
#include <stdlib.h> nolist
/* maybe #undef nolist here */