/ RTC (verificações de erro de tempo de execução)

Usado para habilitar e desabilitar o recurso de verificações de erro de tempo de execução, juntamente com o runtime_checks pragma.

/RTC1
/RTCc
/RTCs
/RTCu

Arguments

  • 1
    Equivalente a /RTCsu.

  • c
    Relatórios quando um valor é atribuído a um tipo de dados menor e resulta em uma perda de dados. Por exemplo, se um valor do tipo short 0x101 é atribuído a uma variável do tipo char.

    Esta opção relata situações em que você pretende truncar, por exemplo, se desejar que os primeiros oito bits de um int retornado como um char. Porque /RTCc causa um erro de tempo de execução se houver informações perdidas como resultado de uma atribuição, você pode mascarar desativar as informações necessárias para evitar um erro de tempo de execução como resultado de /RTCc. For example:

    #include <crtdbg.h>
    
    char get8bits(int value, int position) {
       _ASSERT(position < 32);
       return (char)(value >> position);
       // Try the following line instead:
       // return (char)((value >> position) & 0xff);
    }
    
    int main() {
       get8bits(12341235,3);
    }
    
  • s
    Permite empilhar quadro Runtime verificação de erros, como segue:

    • Inicialização de variáveis locais para um valor diferente de zero. Isso ajuda a identificar bugs que não aparecem quando executado no modo de depuração. Há uma chance maior de variáveis de pilha ainda será zero em uma compilação de depuração em comparação comparada uma versão de compilação devido a otimizações do compilador de variáveis de pilha em uma versão de compilação. Depois que um programa tiver usado uma área de sua pilha, ele nunca é redefinido como 0 pelo compilador. Portanto, as variáveis de pilha subseqüente e não inicializado acontecem usar a mesma área de pilha podem retornar valores resultados de uso antes da memória de pilha.

    • Detecção de estouros e subutilizações de variáveis locais, tais como matrizes. /RTCsnão irá detectar saturações ao acessar a memória que resulta do preenchimento do compilador dentro de uma estrutura. Enchimento poderia ocorrer por meio de align (C++), /ZP (alinhamento de membro Struct), ou pack, ou se você ordenar os elementos de estrutura de tal maneira que exigem o compilador para adicionar preenchimento.

    • Verificação de ponteiro de pilha, que detecta a corrupção do ponteiro de pilha. Corrupção de ponteiro de pilha pode ser causada por uma incompatibilidade de convenção de chamada. Por exemplo, usando um ponteiro de função, você chamar uma função em uma DLL que é exportada como __stdcall , mas você declara o ponteiro para a função __cdecl.

  • u
    Relatórios quando uma variável é usada sem ter sido inicializado. Por exemplo, uma instrução que gera C4701 também pode gerar um erro em tempo de execução em /RTCu. Qualquer instrução que gera C4700 de aviso (nível 1 e nível 4) do compilador gerará um erro de tempo de execução em /RTCu.

    No entanto, considere o fragmento de código a seguir:

    int a, *b, c;
    if ( 1 )
    b = &a;
    c = a;  // No run-time error with /RTCu
    

    Se uma variável pode ter sido inicializada, ele não será informado em tempo de execução por /RTCu. Por exemplo, após uma variável com alias através de um ponteiro, o compilador não irá controlar a variável e relatar usos não inicializados. Na verdade, você pode inicializar uma variável, tirando seu endereço. A & operador funciona como um operador de atribuição nessa situação.

Comentários

As verificações de erro de tempo de execução são uma maneira de você encontrar problemas em seu código em execução; Para obter mais informações, consulte Como: Use verificações nativas em tempo de execução.

Se você compilar seu programa de linha de comando usando qualquer um do /RTC Opções do compilador, qualquer pragma optimize instruções em seu código irá falhar silenciosamente. Isso ocorre porque as verificações de erro de tempo de execução não são válidas em uma compilação de lançamento (otimizado).

Você deve usar /RTC para compilações de desenvolvimento; /RTCnão deve ser usado para uma compilação de varejo. /RTCnão pode ser usado com otimizações do compilador (/O opções (otimizar o código)). Uma imagem do programa construído com /RTC será um pouco maior e um pouco mais lento do que uma imagem criada com /Od (até 5% mais lento do que uma /Od build).

A diretiva de pré-processamento de __MSVC_RUNTIME_CHECKS será definida quando você usar qualquer /RTC opção ou /GZ.

Para definir esta opção de compilador no ambiente de desenvolvimento Visual Studio

  1. Abra o projeto Property Pages caixa de diálogo. For details, see Como: Abrir páginas de propriedades do projeto.

  2. Clique o C/C++ pasta.

  3. Clique na A geração de código página de propriedades.

  4. Modificar uma ou ambas as seguintes propriedades: Verificações básicas de tempo de execução ou verificação de tipo menor.

Para definir esta opção de compilador programaticamente

Consulte também

Tarefas

Amostra RTC: Verificações de erro de tempo de execução

Referência

Opções do compilador

Definindo opções do compilador