Share via


Upozornění kompilátoru (úroveň 1) C5105

Rozšíření makra vytvářející "definované" má nedefinované chování

Poznámky

Preprocesor zjistil defined operátor ve výstupu rozšíření makra. defined Pokud se operátor zobrazí jako výsledek rozšíření makra, standard jazyka C určuje chování jako nedefinované. Upozornění C5105 je upozornění na přenositelnost a dodržování standardů vydané, protože jiné vyhovující kompilátory můžou mít jiné chování. Pokud chcete tento problém vyřešit, přesuňte defined operátor mimo makro nebo potlačit upozornění C5105.

Chování specifické pro Microsoft: Kompilátor MSVC vyhodnotí defined operátor normálně, a to i v rámci /permissive-.

Toto upozornění je nové v sadě Visual Studio 2017 verze 15.8. Generuje se pouze novým preprocesorem vyhovujícím standardům určeným možností kompilátoru /experimental:preprocessor .

Vypnutí upozornění bez změn kódu

Upozornění pro konkrétní řádek kódu můžete vypnout pomocí direktivy pragma upozornění . #pragma warning(suppress : 5105) Upozornění můžete také vypnout v souboru pomocí direktivy pragma upozornění . #pragma warning(disable : 5105) Upozornění můžete v sestaveních příkazového řádku globálně vypnout pomocí možnosti příkazového řádku /wd5105 .

Vypnutí upozornění pro celý projekt v integrovaném vývojovém prostředí sady Visual Studio:

  1. Otevřete dialogové okno Stránky vlastností projektu. Informace o použití dialogového okna Stránky vlastností naleznete v tématu Stránky vlastností.
  2. Vyberte stránku Vlastnosti>konfigurace C/C++>Upřesnit.
  3. Upravte vlastnost Disable Specific Warnings pro přidání 5105. Pokud chcete změny použít, zvolte OK .

Příklad

Tento ukázkový program ukazuje, jak vygenerovat upozornění C5105 a jak ho opravit.

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