簡體   English   中英

如何在 C 中進行顯式失敗

[英]How to do an explicit fall-through in C

較新版本的 gcc 提供了Wimplicit-fallthrough ,這對於大多數 switch 語句來說非常Wimplicit-fallthrough 但是,我有一個 switch 語句,我想在其中允許所有 case 語句失敗。

有沒有辦法做一個明確的失敗? 我寧願避免為此文件使用Wno-implicit-fallthrough進行編譯。

編輯:我正在尋找一種方法來使失敗明確(如果可能的話),而不是通過編譯器開關或編譯指示關閉警告。

使用__attribute__ ((fallthrough))

switch (condition) {
    case 1:
        printf("1 ");
        __attribute__ ((fallthrough));
    case 2:
        printf("2 ");
        __attribute__ ((fallthrough));
    case 3:
        printf("3\n");
        break;
}

GCC fallghrough 魔術評論

如果你能幫助它,你不應該使用它,它很瘋狂,但很高興知道:

int main(int argc, char **argv) {
    (void)argv;
    switch (argc) {
        case 0:
            argc = 1;
            // fall through
        case 1:
            argc = 2;
    };
}

通過以下方式防止 GCC 7.4.0 上的警告:

gcc -Wall -Wextra main.c

man gcc描述了如何根據以下值識別不同的注釋:

-Wimplicit-fallthrough=n

C++17 [[fallthrough]]屬性

C++17 為此獲得了標准化語法: GCC 7、-Wimplicit-fallthrough 警告,以及清除它們的可移植方式?

您應該能夠使用GCC 診斷編譯指示為源文件或源文件的某些部分禁用該特定警告。 嘗試將其放在文件頂部:

#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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