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:
- 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í.
- Vyberte stránku Vlastnosti>konfigurace C/C++>Upřesnit.
- 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
}