如何删除#pragma区域的GCC警告?

Dam*_*mir 7 c c++ gcc visual-studio-2010

如何删除GCC警告#pragma region?我添加了pragma region以便轻松查看代码,但它会报告警告#pragma region.我正在使用Visual Studio 2010.

nos*_*nos 9

gcc有这个警告标志:

-Wunknown-pragmas 遇到GCC无法理解的#pragma指令时发出警告.如果使用此命令行选项,则甚至会针对系统头文件中的未知pragma发出警告.如果警告仅由-Wall命令行选项启用,则情况并非如此.

并且按照惯例你可以否定它,这意味着未知的pragma将不会被警告.也就是说,使用-Wno-unknown-pragmas.

请注意,-Wno-unknown-pragmas必须在打开此警告的任何命令行标志之后,例如-Wall- 这也禁用所有未知pragma上的警告,因此请小心使用.

  • 只是为了迂腐,这个选项会关闭_all_ pragma的警告,不可能选择哪个pragma应该生成警告而哪些不应该生成警告. (3认同)

Som*_*ude 8

不要在GCC上使用它?:)

我现在能想到的最简单的解决方案是使用预处理器条件:

#ifndef __GNUC__
#pragma region
#endif

// Stuff...

#ifndef __GNUC__
#pragma endregion
#endif
Run Code Online (Sandbox Code Playgroud)

不太好看或可读,但会使代码编译而不会在GCC上发出警告.

  • @altendky - 怎么样?宏的*replacement-list*中的单个`#`(而不是`##`)不能识别预处理器指令.它是stringify运算符.```运算符后面的东西必须是宏参数名. (6认同)
  • 如果MSVC支持C99和C++ 11`_Pragma`运算符,则在使用MSVC时可以有条件地将宏定义为`_Pragma("region")`,否则将其定义为空 (2认同)

Dan*_*Dan 5

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
... Code using Unknown pragmas ...
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)


小智 5

它似乎是一个 MSVC 特定的编译指示,所以你应该使用

#ifdef _MSC_VER
#pragma region
#endif

<code here>

#ifdef _MSC_VER
#pragma endregion
#endif
Run Code Online (Sandbox Code Playgroud)