Compartilhar via


Examinando as instruções de declaração

Suponha que quando você executa a versão de depurar do seu aplicativo MFC, não há nenhum problema.No entanto, a versão de lançamento do mesmo aplicativo falha, retorna resultados incorretos, e/ou apresenta Outros comportamento anormal.

Esse problema pode ser causado ao inserir código importantes em uma demonstrativo de demonstrativo para verificar que ele seja executado corretamente.Como instruções de declaração são comentadas em uma compilação de versão de um programa do MFC, o código não é executado em uma compilação de versão.

Se estiver usando declaração para confirmar que uma telefonar de função bem-sucedida, considere a possibilidade de usar VERIFY em vez disso. A macro VERIFY avalia seus próprios argumentos em ambos os depurar e versão compilações do aplicativo.

Outro preferencial técnica é atribuir o valor retornado da função a uma variável temporária e, em seguida, testar a variável em uma demonstrativo de demonstrativo.

Examine o fragmento de código a seguir:

enum {
    sizeOfBuffer = 20
};
char *buf;
ASSERT(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Esse código é executado perfeitamente em uma versão de depurar de um aplicativo MFC.Se a telefonar para calloc( ) falhar, será exibida uma mensagem de diagnóstico que inclui o arquivo e o número de linha. No entanto, em uma compilação para venda de um aplicativo MFC:

  • a telefonar para calloc( ) nunca ocorrer, deixando buf não inicializado, ou

  • strcpy_s( )cópias"Hello, World"em um pedaço aleatório de memória, possivelmente, travando o aplicativo ou travando o sistema, ou

  • free() tentativa de liberar memória que nunca foi alocada.

Para usar a declaração corretamente, o código de exemplo deve ser alterado para o seguinte:

enum {
    sizeOfBuffer = 20
};
char *buf;
buf = (char *) calloc(sizeOfBuffer, sizeof(char) );
ASSERT( buf != NULL );
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Ou, você pode usar VERIFY em vez disso:

enum {
    sizeOfBuffer = 20
};
char *buf;
VERIFY(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Consulte também

Referência

Corrigindo problemas de compilação de versão