атрибуты c++



Почему GCC предупреждает меня о падении, даже когда я использую[[fallthrough]]? (1)

Вы пропустили точку с запятой после атрибута:

case 0:
    std::cout << "a\n";
    [[fallthrough]];
    //             ^
case 1:

[[fallthrough]] должен быть применен к пустому оператору (см. P0188R1 ). Текущая линия Clang дает полезную ошибку в этом случае :

error: fallthrough attribute is only allowed on empty statements
    [[fallthrough]]
      ^
note: did you forget ';'?
    [[fallthrough]]
                   ^
                   ;

Обновление: Коди Грей reported этой проблеме команде GCC.

В следующем фрагменте кода я использую стандартный [[fallthrough]] из C ++ 1z, чтобы задокументировать, что желателен прорыв:

#include <iostream>

int main() {
    switch (0) {
        case 0:
            std::cout << "a\n";
            [[fallthrough]]
        case 1:
            std::cout << "b\n";
            break;
    }
}

С GCC 7.1 код компилируется без ошибок. Тем не менее, компилятор все еще предупреждает меня о падении:

warning: this statement may fall through [-Wimplicit-fallthrough=]
    std::cout << "a\n";
    ~~~~~~~~~~^~~~~~~~

Зачем?





fall-through