- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在从宏扩展的代码中禁用 g++ 警告。据我了解,_Pragma
应遵循宏用法,并且在使用 g++
编译时不应触发 Wparentheses
:
#include <stdio.h>
#define TEST(expr) \
int a = 1; \
_Pragma( "GCC diagnostic push" ) \
_Pragma( "GCC diagnostic ignored \"-Wparentheses\"" ) \
if (a <= expr) { \
printf("filler\n"); \
} \
_Pragma( "GCC diagnostic pop" )
int main(){
int b = 2, c = 3;
TEST(b == c);
}
当我用 g++
编译它时,我收到了 Wparentheses
警告,我试图禁用它。
xarn@DESKTOP-B2A3CNC:/mnt/c/ubuntu$ g++ -Wall -Wextra test3.c
test3.c: In function ‘int main()’:
test3.c:8:11: warning: suggest parentheses around comparison in operand of ‘==’ [-Wparentheses]
if (a <= expr) { \
^
test3.c:15:5: note: in expansion of macro ‘TEST’
TEST(b == c);
^
然而,当使用 gcc
时它按预期工作:
xarn@DESKTOP-B2A3CNC:/mnt/c/ubuntu$ gcc -Wall -Wextra test3.c
test3.c: In function ‘main’:
test3.c:16:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
我正在使用 g++
4.8.5 版。
最佳答案
g++ 处理 _Pragma
时存在长期存在的错误,使用 gcc 前端时不存在这些错误。唯一的解决方案是继续使用足够现代的 g++ 版本(IIRC 6+),或者禁用整个 TU 的警告。
关于c++ - G++ 忽略 _Pragma 诊断被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063596/
我正在尝试在 #define 中使用 #pragma。我正在做这样的事情: // I assume this is a correct syntax. Please point out if it i
在实现我自己的 C11 编译器时,我试图弄清楚如何准确处理 _Pragma 关键字/运算符。 C11 §6.10.9 将 _Pragma 描述为运算符,因此似乎可以使用宏重新定义它,即 #define
_Pragma 的参数是一个字符串,所以我认为当您以正常的 c 预处理器方式将字符串粘贴在一起(即,将它们彼此相邻)时,您可以为 _Pragma 的参数形成一个新字符串。然而 _Pragma("GCC
我想要一个像这样调用的宏: GCC_WARNING(-Wuninitialized) 扩展成这样的代码: _Pragma("GCC diagnostic ignored \"-Wuninitializ
我试图在从宏扩展的代码中禁用 g++ 警告。据我了解,_Pragma 应遵循宏用法,并且在使用 g++ 编译时不应触发 Wparentheses: #include #define TEST(exp
我想通过创建适当的宏来简化一些预处理器代码。我想包装 #ifdef _OPENMP _Pragma("omp critical(stdout)") #endif 成单 _OMP_CRITICA
我正在尝试做类似于 another question 的事情,即有条件地在我的程序中包含 OpenMP 编译指示。但是,我想更进一步,避免用户每次使用 pragma 时都需要指定 omp。换句话说,我
是否有类似 ANSI C 运算符 _Pragma 的东西?在 Visual C++ 中? 例如,我试图定义以下宏: #ifdef _OPENMP #define PRAGMA_IF_OPENMP(x)
如果使用 gcc -E 进行预处理,以下代码会从 _Pragma("GCC error") 中产生一些错误: _Pragma("GCC error \"ERROR\"") // error #defi
看了一些Objective-c的代码,发现界面上面有这句话,谁能告诉我是什么意思,或者感谢提供一些关于clang的教程,非常感谢 最佳答案 在较新版本的 Objective-C 编译器 (clang)
我是一名优秀的程序员,十分优秀!