我試圖禁用從宏展開的代碼中的g ++警告。按照我的理解,_Pragma
應遵循宏的用法,並正在與g++
編譯時,這不應引發Wparentheses
:G ++忽略忽略_Pragma診斷
#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
警告,而我試圖禁用。
[email protected]NC:/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
時:
[email protected]:/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。
gcc 4.8.5不會用'gcc -Wall -Wextra test3.c'編譯發佈的源代碼。它會因'致命錯誤:iostream:沒有這樣的文件或目錄'而失敗,因爲'iostream'不是C頭文件。請發佈真實的代碼。 –
@MikeKinghan抱歉,複製粘貼從.cpp文件引發的問題。現在它使用'printf' – Xarn