Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
expansão macro produzindo 'definido' tem comportamento indefinido
Observações
O pré-processador detetou um defined operador na saída de uma expansão macro. Se um defined operador aparecer como resultado de uma expansão de macro, o padrão C especifica o comportamento como indefinido. O aviso C5105 é um aviso de portabilidade e conformidade de padrões, emitido porque outros compiladores conformes podem ter comportamento diferente. Para resolver esse problema, mova o defined operador para fora da macro ou suprimir o aviso C5105.
Comportamento específico da Microsoft: O compilador MSVC avalia o defined operador normalmente, mesmo em /permissive-.
Este aviso é novo no Visual Studio 2017 versão 15.8. Ele é gerado apenas pelo novo pré-processador em conformidade com os padrões, especificado pela opção do /experimental:preprocessor compilador.
Para desativar o aviso sem alterações de código
Você pode desativar o aviso para uma linha de código específica usando o pragma de aviso , #pragma warning(suppress : 5105). Você também pode desativar o aviso dentro de um arquivo usando o pragma de aviso, #pragma warning(disable : 5105). Você pode desativar o aviso globalmente em compilações de linha de comando usando a opção de linha de comando /wd5105 .
Para desativar o aviso para um projeto inteiro no IDE do Visual Studio:
- Abra a caixa de diálogo Páginas de propriedades do seu projeto. Para obter informações sobre como usar a caixa de diálogo Páginas de propriedades, consulte Páginas de propriedades.
- Selecione a página Propriedades> de configuraçãoC/C++>Advanced.
-
Edite a propriedade Desativar avisos específicos para adicionar
5105. Escolha OK para aplicar as alterações.
Example
Este programa de exemplo mostra como gerar aviso C5105 e como corrigi-lo.
// 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
}