Partilhar via


Aviso do compilador (nível 1) C5105

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:

  1. 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.
  2. Selecione a página Propriedades> de configuraçãoC/C++>Advanced.
  3. 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
}