Freigeben über


Compilerwarnung (Ebene 1) C5105

Die Makroerweiterung, die "definiert" erzeugt, weist ein nicht definiertes Verhalten auf.

Hinweise

Der Präprozessor hat einen defined Operator in der Ausgabe einer Makroerweiterung erkannt. Wenn ein defined Operator als Ergebnis einer Makroerweiterung angezeigt wird, gibt der C-Standard das Verhalten als nicht definiert an. Die C5105-Warnung ist eine Warnung zur Portabilität und Standardskonformität, die ausgegeben wird, da andere konforme Compiler möglicherweise ein anderes Verhalten aufweisen. Um dieses Problem zu beheben, verschieben Sie den Operator aus dem Makro, oder unterdrücken Sie die defined Warnung C5105.

Microsoft-spezifisches Verhalten: Der MSVC-Compiler wertet den defined Operator normal aus, auch unter /permissive-.

Diese Warnung ist neu in Visual Studio 2017, Version 15.8. Er wird nur von dem neuen standardkonformen Präprozessor generiert, der von der /experimental:preprocessor Compileroption angegeben wird.

So deaktivieren Sie die Warnung ohne Codeänderungen

Sie können die Warnung für eine bestimmte Codezeile mithilfe des Pragmas #pragma warning(suppress : 5105)der Warnung deaktivieren. Sie können die Warnung in einer Datei auch mit dem Pragma #pragma warning(disable : 5105)der Warnung deaktivieren. Sie können die Warnung global in Befehlszeilenbuilds mithilfe der Befehlszeilenoption "/wd5105 " deaktivieren.

So deaktivieren Sie die Warnung für ein gesamtes Projekt in der Visual Studio-IDE:

  1. Öffnen Sie das Dialogfeld "Eigenschaftenseiten " für Ihr Projekt. Informationen zur Verwendung des Dialogfelds "Eigenschaftenseiten" finden Sie unter "Eigenschaftenseiten".
  2. Wählen Sie die Seite "Konfigurationseigenschaften>C/C++>Erweitert" aus.
  3. Bearbeiten Sie die Eigenschaft "Bestimmte Warnungen deaktivieren", um sie hinzuzufügen 5105. Wählen Sie "OK" aus, um Ihre Änderungen anzuwenden.

Beispiel

Dieses Beispielprogramm zeigt, wie Warnungen C5105 generiert und wie sie behoben werden.

// 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
}