![](/img/trans.png)
[英]warning: suggest parentheses around assignment used as truth value [-Wparentheses]
[英]Force GCC to throw an error when an assignment (wrapped in parenthesis) is used as truth value
我試圖找到一個 GCC 編譯器標志,它會導致 GCC 拒絕編譯以下代碼:
# include <stdio.h>
int main()
{
int x = 1;
if( (x = 10) ) {
printf("x is 10");
} else {
printf("x is not 10");
}
return 0;
}
上面的代碼將在沒有警告的情況下編譯:
gcc -Wall -Werror -O3 -o x.exe x.c
具體來說,我希望 GCC 在if( (x = 10) )
這條線上吐槽。 如果我卸下內支架,GCC 將因-Werror
而損壞
gcc -Wall -Werror -O3 -o x.exe x.c
x.c: In function 'main':
x.c:7:9: error: suggest parentheses around assignment used as truth value [-Werror=parentheses]
if( x = 10 ) {
^
cc1.exe: all warnings being treated as errors
我正在尋找的是一種強制 GCC 即使存在括號也拒絕編譯代碼的方法。
謝謝!
似乎沒有任何方法可以說服 GCC 這樣做。 -Wall -Wextra
不會對您的示例代碼發出警告,而且我沒有看到任何其他看起來相關的警告選項。 (如評論中所述,根據 GCC 的設計,通常使其拒絕其他合法代碼的唯一方法是找到代碼觸發的警告選項,然后使用-Werror
將警告升級為錯誤。)
作為另一個數據點,clang 提供了一組與 GCC 非常相似的警告,並且它具有-Weverything
選項的好處,可以啟用它提供的每個警告。 (如果 GCC 也有這樣的事情,那就太好了。)但是clang -Weverything
也沒有對您的代碼發出任何警告。 . 這似乎是一個很好的證據,表明這些社區中沒有人對像你這樣的代碼實施警告。
我同意這似乎很有用,因此可能值得為 GCC 和/或 clang 提交功能請求(或查看是否有人已經擁有)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.