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?
Respuesta
#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.
gracias por la respuesta :) –
"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. –
#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.
#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á.
¿Puede explicarme 'el preprocesador le dará una advertencia e ignórelo? La declaración en su respuesta? –
Creo que la idea es que 'si escribe '#include" whatever.h ";', el preprocesador le dará una advertencia e ignorará el punto y coma'. –
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
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.
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.
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. –
Esto está bien cubierto en cualquier libro de lenguaje C, ¿tiene uno? –
Sí, sí tengo uno, que es K & R. –
- 1. Perl punto y coma al final de la instrucción
- 2. ¿Por qué Java no muestra un error para punto y coma doble al final de una instrucción?
- 3. ¿Necesitamos punto y coma al final?
- 4. ¿Necesito un punto y coma final aquí?
- 5. ¿Por qué Objective-C permite un punto y coma al final de una definición de método?
- 6. ¿Por qué #define no requiere un punto y coma?
- 7. punto y coma en la definición de la regla Makefile
- 8. ¿Por qué falla la instrucción java if cuando termina en punto y coma?
- 9. advertencia: tokens adicionales al final de la directiva #endif
- 10. cómo quitar coma si la cadena que tiene coma al final
- 11. ¿Por qué necesito un punto y coma aquí?
- 12. Punto y coma después de cerrar la llave en PHP
- 13. Punto y coma después de la función
- 14. Pasando variables de la directiva include a la subcomposición
- 15. ¿Por qué la inferencia de punto y coma de Scala falla aquí?
- 16. Expresión de tabla común, ¿por qué punto y coma?
- 17. Poner coma (,) al final de la matriz. ¿Es una convención?
- 18. ¿Por qué C# no requiere un punto y coma después de una definición de clase?
- 19. ¿Por qué puede tener una coma al final de un inicializador de colecciones?
- 20. ¿por qué la coma (,) no causa un error de compilación?
- 21. ¿Qué es un punto final?
- 22. # include como directiva en AppleScript
- 23. Dígitos de concordancia regex, coma y punto y coma?
- 24. ¿por qué incluir líneas que no terminan con un punto y coma?
- 25. ¿Por qué es malo poner un espacio antes de un punto y coma?
- 26. Punto y coma en jQuery
- 27. La aplicación de servicio wcf predeterminada no tiene un punto final definido
- 28. Uso de punto y coma dentro timeit
- 29. ¿Qué es un "punto final" en WCF?
- 30. Razor/JavaScript y punto y coma posterior
Porque no es una declaración C. Es una directiva (instrucción) para el preprocesador. – wildplasser
Es como se diseña C y también lo hace C++. – Surya
@Surya: No es un comentario relevante, supongo, después de ver las respuestas –