2012-04-04 23 views
6

En C, los puntos y comas (;) se utilizan para indicar el final de la instrucción. ¿Por qué las líneas #include no necesitan punto y coma?¿por qué la directiva #include no tiene un punto y coma al final de la instrucción?

+2

Porque no es una declaración C. Es una directiva (instrucción) para el preprocesador. – wildplasser

+0

Es como se diseña C y también lo hace C++. – Surya

+0

@Surya: No es un comentario relevante, supongo, después de ver las respuestas –

Respuesta

12

#include (y todas las otras líneas que comienzan con # como #define) es parte del preprocessor. En realidad, este es un programa separado que se ejecuta antes del compilador principal y hace cosas como que incluyen archivos en la expansión de origen y macro.

+0

gracias por la respuesta :) –

+1

"Esto es en realidad un programa separado" - si está usando GCC, lo es. Si usas MSVC, no lo es. El punto importante es que el preprocesamiento se define en el estándar como una fase que ocurre antes de la fase de compilación principal, y que tiene su propia sintaxis definida que no incluye puntos y comas. Depende totalmente de la implementación cómo organizar las fases de traducción en los programas. –

2

#include es procesada por el preprocesador y el compilador no ve estas afirmaciones. Por lo tanto, ; no es necesario al final de la declaración.

1
#include "whatever.h" 

Simplemente reemplaza esa línea en el archivo de origen con "whatever.h". Entonces no necesita poner ; al final de "whatever.h". El preprocesador le dará una advertencia y lo ignorará.

+0

¿Puede explicarme 'el preprocesador le dará una advertencia e ignórelo? La declaración en su respuesta? –

+1

Creo que la idea es que 'si escribe '#include" whatever.h ";', el preprocesador le dará una advertencia e ignorará el punto y coma'. –

+0

Mientras lee los tokens una vez que ve #, busca palabras clave (include, define, pragma, etc.) después de eso. Específicamente para incluir, los siguientes tokens son seguidos por o ("). Espera que el siguiente personaje después de eso sea una nueva línea. De lo contrario, le da una advertencia para la ficha adicional que no pudo entender. Como @JonathanLeffler señaló "ignorarlo" destinado a; no para el archivo de encabezado. –

2

Porque las directivas de preprocesamiento no son declaraciones.

Incluso no se requieren todas las declaraciones para tener un ; final. Por ejemplo:

int bla = 1; 

if (bla) { 
} 

Tras la declaración de bla tenemos dos estados: uno if declaración y una sentencia compuesta vacía. No hay ; pero el programa es válido.

2

La directiva es procesada por el preprocesador No es un compilador, es un simple procesador de sustitución de texto. Que usa el final de línea (\n) como un personaje significativo, a diferencia del compilador de C que solo lo trata como un espacio en blanco. También la razón por la cual \ al final de la línea tiene un efecto.

+0

No pude entender qué significa esta línea 'También la razón por la que \ al final de la línea tiene un efecto '. ¿Podría ser más específico? Gracias. –

+0

Esto está bien cubierto en cualquier libro de lenguaje C, ¿tiene uno? –

+0

Sí, sí tengo uno, que es K & R. –

Cuestiones relacionadas