cuando se incluyen bibliotecas c, la línea no termina con un punto y coma, mientras que otras instrucciones sí. ¿Cuál es la razón detrás de esto?¿por qué incluir líneas que no terminan con un punto y coma?
Respuesta
macros misma razón #define no lo hacen - que son para el preprocesador, que se expande cosas como incluye y define antes de que el compilador toma adecuada terminado.
Las líneas que comienzan con un # no son parte del lenguaje C en sí, son instrucciones para un preprocesador. Cuando se diseñó por primera vez, los puntos y comas no eran necesarios.
#include
es un comando pre-procesamiento como #define
. #include
le dice al compilador que incluya el archivo especificado en su código fuente antes de que su código realmente se compile.
He solucionado el formateo por usted; cuando escribe una respuesta, puede ver la vista previa debajo del cuadro de texto para ver cómo se verá. # es un char de formateo, por lo que debe protegerlo de una forma u otra. –
gracias por su ayuda. – sdp07
"... mientras que otras declaraciones lo hacen".
En primer lugar, las directivas de preprocesador no son declaraciones . La declaración es una entidad que existe solo en el nivel sintáctico/semántico. Las directivas de preprocesador se procesan en etapas relativamente tempranas de la traducción, antes de que comience cualquier análisis de sintaxis, por lo que en esa etapa todavía no existe una "declaración". Y, por esta razón, no existe un fundamento significativo para exigir que se ponga fin a la directiva #include
con un punto y coma. De hecho, las directivas de preprocesador ocupan por definición toda la línea, lo que significa que ya están terminadas por un carácter de nueva línea. Cualquier terminador adicional sería redundante.
En segundo lugar, no todas las "otras declaraciones" terminan con punto y coma. Una instrucción compuesta, por ejemplo, no contiene
i = 5;
{ /* <- compound statement begins here... */
i = 10;
} /* <- ... and ends here. Note: no semicolon */
i = 15;
- 1. ¿Por qué #define no requiere un punto y coma?
- 2. líneas egrep que comienzan con r y terminan con g
- 3. ¿Por qué necesito un punto y coma aquí?
- 4. ¿por qué la directiva #include no tiene un punto y coma al final de la instrucción?
- 5. ¿Listar solo líneas duplicadas basadas en una columna de un archivo delimitado por punto y coma?
- 6. Expresión de tabla común, ¿por qué punto y coma?
- 7. Punto y coma en jQuery
- 8. ¿Por qué debería usar un punto y coma después de cada función en javascript?
- 9. ¿Por qué C# no requiere un punto y coma después de una definición de clase?
- 10. Dígitos de concordancia regex, coma y punto y coma?
- 11. ¿Qué expresión regular coincidirá con cada carácter excepto la coma ',' o punto y coma ';'?
- 12. ¿Necesito un punto y coma final aquí?
- 13. ¿Por qué es malo poner un espacio antes de un punto y coma?
- 14. Apertura de archivo CSV delimitado por punto y coma
- 15. Uso de punto y coma dentro timeit
- 16. ¿Cuándo debería usar punto y coma en SQL Server?
- 17. Razor/JavaScript y punto y coma posterior
- 18. RegEx para detectar si una línea no termina en un punto y coma
- 19. Punto y coma opcional en C++
- 20. ¿Qué significa 'punto y coma' como una unidad de tamaño
- 21. ¿Por qué este código necesita una línea vacía o un punto y coma?
- 22. ¿Por qué mi consulta con LIKE '% \ _' devuelve todas las filas y no solo las que terminan en un guión bajo?
- 23. ¿Por qué Objective-C permite un punto y coma al final de una definición de método?
- 24. Punto y coma después de la función
- 25. C# = ¿Por qué los procesos de Excel no terminan?
- 26. Resharper añade automáticamente punto y coma
- 27. Reemplazar punto (.) Con coma (,) usando RegEx?
- 28. ¿Por qué Java no muestra un error para punto y coma doble al final de una instrucción?
- 29. Cálculo, reemplace el punto con una coma
- 30. análisis de un punto y coma Lista separada
Una definición un poco más: el preprocesador se ejecuta ANTES de que el compilador se ejecute, y reemplaza el texto. Una instrucción #include se reemplaza por el contenido del archivo al que se hace referencia. Un #define se ingresa en una tabla de búsqueda, y luego cuando la definición se ve en el código, se reemplaza con el valor almacenado, etc., etc. De hecho, puede usar otro preprocesador en lugar del estándar, pero pocos la gente lo hace en el mundo real. –
¿no es también el preprocesador que hace la continuación de la línea funky, como \ y la concatenación de literales rotos? – JustJeff
@JustJeff: vea http://stackoverflow.com/questions/1476892/poster-with-the-8-phases-of-translation-in-the-c-language; la concatenación de literales de cadena se realiza en la fase de traducción 6 entre el preprocesamiento (fase 4) y el análisis semántico/compilación (fase 7), por lo que puede hacerlo en preprocesador o compilador; unir las líneas a lo largo de las barras inversas posteriores tiene lugar en la fase 2 antes de que el preprocesador funcione correctamente. – Christoph