Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozszerzenie makr tworzące "zdefiniowane" ma niezdefiniowane zachowanie
Uwagi
Preprocesor wykrył defined
operator w danych wyjściowych rozszerzenia makra. defined
Jeśli operator pojawi się w wyniku rozszerzenia makra, standard C określa zachowanie jako niezdefiniowane. Ostrzeżenie C5105 to ostrzeżenie dotyczące przenośności i zgodności ze standardami, wydane, ponieważ inne zgodne kompilatory mogą mieć inne zachowanie. Aby rozwiązać ten problem, przenieś defined
operator z makra lub pomiń ostrzeżenie C5105.
Zachowanie specyficzne dla firmy Microsoft: kompilator MSVC ocenia defined
operator normalnie, nawet w obszarze /permissive-
.
To ostrzeżenie jest nowe w programie Visual Studio 2017 w wersji 15.8. Jest generowany tylko przez nowy preprocesor zgodny ze standardami określony przez opcję kompilatora /experimental:preprocessor
.
Aby wyłączyć ostrzeżenie bez zmian kodu
Ostrzeżenie dla określonego wiersza kodu można wyłączyć przy użyciu ostrzeżenia pragma , #pragma warning(suppress : 5105)
. Możesz również wyłączyć ostrzeżenie w pliku przy użyciu ostrzeżenia pragma, #pragma warning(disable : 5105)
. Ostrzeżenie można wyłączyć globalnie w kompilacjach wiersza polecenia przy użyciu opcji wiersza polecenia /wd5105 .
Aby wyłączyć ostrzeżenie dotyczące całego projektu w środowisku IDE programu Visual Studio:
- Otwórz okno dialogowe Strony właściwości dla projektu. Aby uzyskać informacje na temat korzystania z okna dialogowego Strony właściwości, zobacz Strony właściwości.
- Wybierz stronę Właściwości>konfiguracji C/C++>Advanced.
- Edytuj właściwość Wyłącz określone ostrzeżenia, aby dodać
5105
element . Wybierz przycisk OK , aby zastosować zmiany.
Przykład
Ten przykładowy program pokazuje, jak wygenerować ostrzeżenie C5105 i jak go naprawić.
// 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
}