gpt4 book ai didi

c++ - G++ 忽略 _Pragma 诊断被忽略

转载 作者:行者123 更新时间:2023-11-28 05:13:47 24 4
gpt4 key购买 nike

我试图在从宏扩展的代码中禁用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com