簡體   English   中英

當賦值(括在括號中)用作真值時,強制 GCC 引發錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM