referencia programacion preprocesador microsoft directivas codigos c if-statement c-preprocessor

programacion - Diferencia entre la directiva del preprocesador#if y la normal si



manual de referencia c# (4)

¿Cuál es la diferencia entre la directiva de preprocesador #if y la normal if en C ? Soy nuevo en C



El preprocesador es manejado por el preprocesador como el primer paso en el programa que se está compilando. Lo normal si se maneja en tiempo de ejecución cuando se ejecuta el programa. La directiva del preprocesador se usa para habilitar la compilación condicional, usando diferentes secciones del código dependiendo de las diferentes constantes / expresiones definidas del preprocesador. Lo normal si se usa para controlar el flujo en el programa de ejecución.


La directiva del preprocesador comprueba las macros o, en otras palabras, # define las directivas y reemplaza la definición si está definida. Por lo tanto, sólo se comprueban las variables macro. Esto se lleva a cabo durante la fase de preprocesamiento.

El token normal de control if o el control if comprueba una condición con variables o valores de retorno de función. Esta comprobación se realiza durante la ejecución.


Las declaraciones con # delante de ellas se denominan directivas de preprocesador. Son procesados ​​por un analizador antes de compilar el código. Desde el primer golpe de búsqueda con Google (http://www.cplusplus.com/doc/tutorial/preprocessor/):

Las directivas de preprocesador son líneas incluidas en el código de nuestros programas que no son declaraciones de programas sino directivas para el preprocesador. Estas líneas siempre van precedidas por un signo de hash (#). El preprocesador se ejecuta antes de que comience la compilación real del código, por lo tanto, el preprocesador procesa todas estas directivas antes de que las declaraciones generen cualquier código.

Así que un #if se decidirá en tiempo de compilación, un "normal" si se decidirá en tiempo de ejecución. En otras palabras,

#define TEST 1 #if TEST printf("%d", TEST); #endif

Compilará como

printf("%d", 1);

Si en cambio tu escribieras

#define TEST 1 if(TEST) printf("%d", TEST);

El programa en realidad compilaría como

if(1) printf("%d", 1);