c preprocessor - salida - ¿Cómo genero un error o advertencia en el preprocesador C?
funcion preprocesador en c++ (7)
C proporciona una declaración #error
y la mayoría de los compiladores agregan una instrucción #warning
. La documentación de gcc recomienda citar el mensaje.
Tengo un programa que debe compilarse solo en modo DEPURAR. (propósito de prueba)
¿Cómo puedo hacer que el preprocesador evite la compilación en el modo RELEASE?
En Code :: Blocks, si no desea el modo Release, puede eliminar el modo Release. Para hacer esto, haga clic en el menú Proyecto, seleccione Propiedades ... y en la pestaña Objetivos de compilación puede hacer clic en Liberar y luego hacer clic en el botón Eliminar. Eliminar el modo Release solo lo hace para el proyecto actual, por lo que aún puede usarlo en otros proyectos.
De lo contrario, si realmente desea usar el preprocesador, puede hacer esto:
#ifdef RELEASE
#error "You have to use the Debug mode"
#endif
Lugar en cualquier lugar:
#ifndef DEBUG
#error Only Debug builds are supported
#endif
Para GCC y Clang (y probablemente cualquier compilador que admita la característica _Pragma) puede definir una macro:
#if ! DEBUG
#define FIX_FOR_RELEASE(statement) _Pragma ("GCC error /"Must be fixed for release version/"")
#else
#define FIX_FOR_RELEASE(statement) statement
#endif
Puede utilizar esta macro para hacks temporales, por ejemplo, para evitar el código que un compañero de trabajo aún no ha escrito, para asegurarse de que no olvide repararlo una vez que desee liberar una compilación al público. Ya sea
FIX_FOR_RELEASE()
// Code that must be removed or fixed before you can release
o
FIX_FOR_RELEASE(statement that must be removed or fixed before you can release);
Puedes usar una directiva de error
para eso. El siguiente código generará un error en el tiempo de compilación si DEBUG
no está definido:
#ifndef DEBUG
#error This is an error message
#endif
Si simplemente desea informar un error:
#ifdef RELEASE
#error Release mode not allowed
#endif
funcionará con la mayoría de los compiladores.
Tal vez algo más sofisticado, pero solo es copiar y pegar de soluciones anteriores. :-)
#ifdef DEBUG
#pragma message ( "Debug configuration - OK" )
#elif RELEASE
#error "Release configuration - WRONG"
#else
#error "Unknown configuration - DEFINITELY WRONG"
#endif
PD. También hay otra forma de generar una advertencia. Crea una etiqueta sin referencia como
HereIsMyWarning:
y no lo hace referencia. Durante la compilación, recibirá una advertencia como
1>../Example.c(71) : warning C4102: ''HereIsMyWarning'' : unreferenced label