2011-03-03 15 views
18

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

+0

¿Estás preguntando qué hace el preprocesador? ¿Estás preguntando cómo funciona? ¿Qué estás realmente preguntando? –

+0

¡Quiero saber cómo funciona el preprocesador! – kevin

+1

por favor no grite, y por favor haga preguntas gramaticales. No sé qué significa "cómo funciona el preprocesador": ciertamente no está claro cuál de las alternativas de S.Lott debe identificar. –

Respuesta

17

Las declaraciones con # delante de ellas se denominan directivas de preprocesador. Son procesados ​​por un analizador antes de que el código sea realmente compilado. A partir de la primera búsqueda golpeó a través de Google (http://www.cplusplus.com/doc/tutorial/preprocessor/):

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

Así que un #if se decidirá en tiempo de compilación, una "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 por el contrario usted escribió

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

El programa en realidad compilar como

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

para que podamos usar lo que queramos? – kevin

+0

@kevin No. Específicamente 'int x = 1; #if X == 1' no funciona en absoluto. –

4

El preprocesador if le permite condicionar el código antes de enviarlo al compilador. normalmente se utiliza para evitar que el código del encabezado se agregue dos veces.

editar, ¿quiso decir C++, porque fue etiquetado como tal? http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

+0

Dejar de agregar el código del encabezado dos veces es un uso muy limitado e incluso esotérico del preprocesador ... apenas "normalmente". –

+0

@Jim Balter Basado en la pregunta original, Kevin y otros que probablemente encuentren estas respuestas probablemente lo vieron primero en el código como guardias de encabezado ... – Zak

+0

No hay ninguna base para esa afirmación. De hecho, es extremadamente poco probable a partir de la pregunta original. –

3

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

-1

cheques directiva de preprocesador de macros o en o luego palabras, #define directivas y reemplaza la definición si está definida. Por lo tanto, solo se verifican las variables macro. Esto se lleva a cabo durante la fase de preprocesamiento.

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

Cuestiones relacionadas