Tengo un programa que debe compilarse solo en el modo DEPURAR. (propósito de la prueba)¿Cómo genero un error o advertencia en el preprocesador C?
¿Cómo puedo hacer que el preprocesador evite la compilación en el modo RELEASE?
Tengo un programa que debe compilarse solo en el modo DEPURAR. (propósito de la prueba)¿Cómo genero un error o advertencia en el preprocesador C?
¿Cómo puedo hacer que el preprocesador evite la compilación en el modo RELEASE?
colocar en cualquier lugar:
#ifndef DEBUG
#error Only Debug builds are supported
#endif
Si simplemente desea informar de un error:
#ifdef RELEASE
#error Release mode not allowed
#endif
funcionará con la mayoría de los compiladores.
Puede usar una directiva error
para eso. El siguiente código generará un error en tiempo de compilación si DEBUG
no está definido:
#ifndef DEBUG
#error This is an error message
#endif
C proporciona una declaración #error
, y la mayoría de los compiladores añadir una declaración #warning
. The gcc documentation recommends para citar el mensaje.
@Antonio A la derecha, no hay ninguna recomendación [más] allí. Reemplacé el enlace con uno por gcc doc. – philant
Tal vez algo más sofisticado, pero es solo copiar & pegar de soluciones anteriores. :-)
#ifdef DEBUG
#pragma message ("Debug configuration - OK")
#elif RELEASE
#error "Release configuration - WRONG"
#else
#error "Unknown configuration - DEFINITELY WRONG"
#endif
P.S. También hay una forma de generar advertencia. Crear labe no referenciado como
HereIsMyWarning:
y no hacer referencia a ella. Durante la compilación obtendrá advertencia como
1>..\Example.c(71) : warning C4102: 'HereIsMyWarning' : unreferenced label
de GCC y Sonido metálico (y probablemente cualquier compilador que admita la función _Pragma) se 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 cortes temporales , por ejemplo, para evitar el código que un compañero de trabajo aún no ha escrito, para asegurarse de que no se olvide de corregirlo una vez que desee liberar una compilación al público. De cualquier
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);
En Code :: Blocks, si no desea que el modo de lanzamiento, se puede eliminar el modo de lanzamiento. 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 utilizar el preprocesador, se puede hacer esto:
#ifdef RELEASE
#error "You have to use the Debug mode"
#endif
Lo siento, mezclar pragma y error mientras se escribe. Corregido en respuesta. –