Поделиться через


Предупреждение компилятора (уровень 4, выключен) C5240

Атрибут "attribute-string": атрибут игнорируется в этой синтаксической позиции

Замечания

Предупреждение C5240 возникает при [[nodiscard]] обнаружении атрибута [[maybe_unused]] в неправильной синтаксической позиции. Например, [[nodiscard]] атрибут в этой синтаксической позиции применяется к decl-specifier-seqфункции, а не к функции f:

static [[nodiscard]] int f() { return 1; }

Перед Visual Studio 2019 версии 16.10 компилятор автоматически игнорирует использование [[nodiscard]] атрибута или [[maybe_unused]] атрибута в синтаксической позиции, которая не применяется к объявленной функции или объекту. В Visual Studio 2019 версии 16.10 и более поздних версиях компилятор выдает предупреждение 4 уровня 4 по умолчанию C5240. Дополнительные сведения о включении этого предупреждения см . в предупреждениях компилятора, отключенных по умолчанию.

Пример

В следующем примере показано, как может произойти предупреждение 5240:

// c5240.cpp
// Compile using: cl /EHsc /W4 /std:c++17 /permissive- /c c5240.cpp
#pragma warning( default: 5240 )
static [[nodiscard]] int f() { return 1; }  // C5240

Чтобы устранить эту проблему, переместите атрибут в правильную синтаксическую позицию:

// c5240_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++17 /permissive- /c c5240_fixed.cpp
#pragma warning( default: 5240 )
[[nodiscard]] static int f() { return 1; }  // OK

См. также

Атрибуты в C++