2011-03-16 26 views
28

¿Puede dar la información sobre la directiva #error en C?directiva #error en C?

¿Qué es la directiva #error? que uso tiene?

+4

Este parece más como una pregunta para http://stackoverflow.com – jmort253

Respuesta

28

Es una directiva de preprocesador que se utiliza (por ejemplo) cuando se espera que se defina uno de varios símbolos posibles -D, pero ninguno lo es.

#if defined(BUILD_TYPE_NORMAL) 
# define DEBUG(x) do {;} while (0) /* paranoid-style null code */ 
#elif defined(BUILD_TYPE_DEBUG) 
# define DEBUG(x) _debug_trace x /* e.g. DEBUG((_debug_trace args)) */ 
#else 
# error "Please specify build type in the Makefile" 
#endif 

Cuando el preprocesador golpea la directiva #error, informará de la cadena como un mensaje de error y la compilación alto; cómo exactamente parece el mensaje de error depende del compilador.

+2

Esa es una declaración paranoide nula ... –

+1

¿No sería más apropiado decir que detiene el preprocesamiento? Supongo que el preproceso se puede ver como un paso en la compilación, pero definitivamente se puede hacer como un paso separado, y se realiza internamente como un paso separado, por lo que falla/informa un error fatal antes que un error de compilación. – RastaJedi

12

es posible que tenga código no válido, pero es algo como ...

#if defined USING_SQLITE && defined USING_MYSQL 
#error You cannot use both sqlite and mysql at the same time 
#endif 

#if !(defined USING_SQLITE && defined USING_MYSQL) 
#error You must use either sqlite or mysql 
#endif 


#ifdef USING_SQLITE 
//... 
#endif 

#ifdef USING_MYSQL 
//... 
#endif 
4

Si compilador compila esta línea entonces se muestra un error fatal del compilador: y detener aún más la compilación del programa:

#include<stdio.h> 
#ifndef __MATH_H 
#error First include then compile 
#else 
int main(){ 
    float a,b=25; 
    a=sqrt(b); 
    printf("%f",a); 
    return 0; 
} 
#endif 

Output:compiler error --> Error directive :First include then compile 
Cuestiones relacionadas