Dela via


Kompilatorvarning (nivå 1) C5105

makroexpansion som producerar "definierad" har odefinierat beteende

Anmärkningar

Förprocessorn identifierade en defined operator i utdata från en makroexpansion. Om en defined operator visas som ett resultat av en makroexpansion anger C-standarden beteendet som odefinierat. C5105-varningen är en portabilitets- och standardefterlevnadsvarning som utfärdas eftersom andra kompilatorer kan ha olika beteende. Lös problemet genom att flytta operatorn defined ut ur makrot eller ignorera varning C5105.

Microsoft-specifikt beteende: MSVC-kompilatorn utvärderar operatorn defined normalt, även under /permissive-.

Den här varningen är ny i Visual Studio 2017 version 15.8. Den genereras endast av den nya standardkonforma förprocessorn, som anges av kompileringsalternativet /experimental:preprocessor .

Inaktivera varningen utan kodändringar

Du kan inaktivera varningen för en specifik kodrad med hjälp av varnings pragma, #pragma warning(suppress : 5105). Du kan också inaktivera varningen i en fil med hjälp av varnings pragma, #pragma warning(disable : 5105). Du kan inaktivera varningen globalt i kommandoradsversioner med kommandoradsalternativet /wd5105 .

Så här inaktiverar du varningen för ett helt projekt i Visual Studio IDE:

  1. Öppna dialogrutan Egenskapssidor för projektet. Information om hur du använder dialogrutan Egenskapssidor finns i Egenskapssidor.
  2. Välj sidan Konfigurationsegenskaper>C/C++>Avancerat .
  3. Redigera egenskapen Inaktivera specifika varningar för att lägga till 5105. Välj OK för att tillämpa ändringarna.

Example

Det här exempelprogrammet visar hur du genererar varning C5105 och hur du åtgärdar den.

// C5105.cpp
// To demonstrate the warning,
// compile by using: cl /EHsc /experimental:preprocessor /DTEST C5105.cpp
// To fix the warning, change the DEFINED_TEST
// definition to the commented version.

#include <iostream>

#define DEFINED_TEST defined TEST
//#if defined TEST
//#define DEFINED_TEST 1
//#else
//#define DEFINED_TEST 0
//#endif

int main()
{
#if DEFINED_TEST  // C5105
    std::cout << "TEST defined\n";
#else
    std::cout << "TEST not defined\n";
#endif
}