/RTC (Comprobaciones de errores en tiempo de ejecución)

Actualización: noviembre 2007

Se utiliza para habilitar y deshabilitar la función de comprobaciones de errores en tiempo de ejecución, junto con el pragma runtime_checks.

/RTC1
/RTCc
/RTCs
/RTCu

Argumentos

  • 1
    Equivalente a /RTCsu.

  • c
    Comunica los casos en que se asigna un valor a un tipo de datos más pequeño y causa una pérdida de datos. Por ejemplo, si un valor de tipo short 0x101 se asigna a una variable de tipo char.

    Esta opción informa de situaciones en las que se pretende truncar, por ejemplo, si se desea devolver los ocho primeros bits de un valor int como char. Dado que /RTCc causa un error en tiempo de ejecución si se pierde información como consecuencia de la asignación, es posible enmascarar la información que necesite para evitarse errores en tiempo de ejecución como resultado de /RTCc. Por ejemplo:

    #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
    Habilita las comprobaciones de errores en tiempo de ejecución en el marco de pila, como se indica a continuación:

    • Inicialización de variables locales a un valor distinto de cero. Ayuda a identificar los errores que no aparecen durante la ejecución en modo de depuración. La posibilidad de que las variables de pila sigan siendo cero es mayor en una generación de depuración si se compara con una generación de lanzamiento, a causa de las optimizaciones por el compilador de las variables de pila en una generación de lanzamiento. Cuando un programa ha utilizado un área de su pila, el compilador nunca la repone a 0. Por lo tanto, las variables de pila posteriores sin inicializar que usen la misma área de la pila pueden devolver valores que permanecen desde el uso anterior de esta memoria de pila.

    • Detección de saturaciones y ejecuciones insuficientes de variables locales como matrices. /RTCs no detecta saturaciones durante el acceso a memoria que resulta de la agregación de relleno por parte del compilador dentro de una estructura. El relleno podría producirse por el uso de align (C++), /Zp (Alineación de miembros de estructura) o pack, o bien si se ordenan elementos de la estructura de tal forma que ello exija al compilador agregar relleno.

    • Comprobación de punteros de pila, que detecta los daños en los punteros de pila. Dichos daños podrían deberse a un error de coincidencia en la convención de llamadas. Por ejemplo, cuando se utiliza un puntero a función, puede llamar a una función de un archivo DLL que se exporta como __stdcall, pero el puntero a la función se declara como __cdecl.

  • u
    Comunica que se está utilizando una variable no inicializada. Por ejemplo, una instrucción que genera Advertencia del compilador (nivel 4) C4701 también puede generar un error en tiempo de ejecución bajo /RTCu. Cualquier instrucción que genere Error del compilador (niveles 1 y 4) C4700 generará un error en tiempo de ejecución bajo /RTCu.

    Sin embargo, considere el fragmento de código siguiente:

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

    Si se hubiera podido inicializar una variable, no habría sido detectada en tiempo de ejecución por /RTCu. Por ejemplo, después de crear un alias de una variable por medio de un puntero, el compilador no hace un seguimiento de la variable ni comunica los usos sin inicialización. En realidad, puede inicializar una variable si toma su dirección. En esta situación, el operador & funciona como un operador de asignación.

Comentarios

Las comprobaciones de errores en tiempo de ejecución son una manera de identificar problemas en el código en ejecución. Para obtener más información, vea Cómo: Utilizar comprobaciones nativas en tiempo de ejecución.

Si compila un programa en la línea de comandos con cualquiera de las opciones del compilador /RTC, las instrucciones de pragma optimize del código producirán un error sin comunicarlo. Esto ocurre porque las comprobaciones de errores en tiempo de ejecución no son válidas en una versión de lanzamiento (optimizada).

Se debería utilizar /RTC para versiones de desarrollo; /RTC no se debería utilizar para una versión de lanzamiento. /RTC no se pueden utilizar con optimizaciones del compilador (/O (Opciones) (Optimizar código)). Una imagen de un programa generada con /RTC tendrá un tamaño ligeramente mayor y será un poco más lenta que otra generada con /Od (hasta un 5 por ciento más lenta que una versión de /Od).

La directiva de preprocesador __MSVC_RUNTIME_CHECKS se define al utilizar una de las opciones /RTC o /GZ.

Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para obtener información detallada, vea Cómo: Abrir páginas de propiedades del proyecto.

  2. Haga clic en la carpeta C/C++.

  3. Haga clic en la página de propiedades Generación de código.

  4. Modifique una o las dos propiedades siguientes: Comprobaciones básicas en tiempo de ejecución o Comprobación de tipos más pequeños.

Para establecer esta opción del compilador mediante programación

Notas para desarrolladores de dispositivos inteligentes

Para compiladores de dispositivos, la función de RTC sólo es compatible con x86, y no está expuesta como valor de propiedades para los proyectos de dispositivos de Visual C++ en el IDE de Visual Studio. No obstante, si usa x86 como destino, esta opción se puede establecer en el IDE en el panel Opciones adicionales de la página de propiedades Línea de comandos de C/C++.

Vea también

Tareas

Ejemplo RTC: comprobaciones de errores en tiempo de ejecución

Referencia

Opciones del compilador

Establecer las opciones del compilador