¿Cuál es la función de #
? ¿Por qué # se requiere antes #include <stdio.h>?
Respuesta
Es porque # es un indicador de que su declaración preprocesador
significado antes de que compila el código, se va a incluir el archivo stdio.h
Debido #
es el prefijo estándar para introducir declaraciones de preprocesador.
En los primeros compiladores de C, el preprocesador era un programa separado que manejaría todas las declaraciones de preprocesador (similar a la forma en que los primeros compiladores de C++ como Cfront generó el código C) y generar código C para el compilador (todavía puede ser un programa separado, pero también puede ser solo una fase del compilador hoy en día).
El símbolo #
es sólo un carácter útil que puede ser reconocida por el preprocesador y actuar en consecuencia, tales como:
#include <stdio.h>
#if 0
#endif
#pragma treat_warnings_as_errors
#define USE_BUGGY_CODE
y así sucesivamente.
Se denotes a preprocessor directive:
Una cosa importante que hay que recordar es que el preprocesador de C no es parte del compilador C.
El preprocesador C utiliza una sintaxis diferente. Todas las directivas en el preprocesador C comienzan con un signo de libra (#). En otras palabras, el signo de libra denota el comienzo de una directiva de preprocesador, y debe ser el primer carácter no espacial de la línea.
#
era probablemente elegido arbitrariamente como un carácter de otro modo no utilizada en la sintaxis C. @
habría funcionado igual de bien, supongo.
Si no hubiera un carácter que lo indicara, probablemente habría problemas para diferenciar entre el código destinado al preprocesador, ¿cómo saber si el if (FOO)
se preprocesó o no?
Las directivas de preprocesador son líneas incluidas en el código de nuestros programas que no son declaraciones de programa sino 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.
#
es una directiva de preprocesador. El preprocesador maneja las directivas para la inclusión del archivo fuente (#include
), las definiciones de macro (#define
) y la inclusión condicional (#if
). Cuando el preprocesador se encuentra con esto, incluirá los encabezados, ampliará las macros y procederá hacia la compilación. Se puede usar para otros fines, como detener la compilación con la directiva #error. Esto se llama compilación condicional.
Sabemos que, sin el programa preprocesador, no se ejecute. Y el preprocesador es # o #include o #define u otro.Entonces # se requiere antes #include.
- 1. ¿Por qué Scanf requiere &?
- 2. ¿Por qué se requiere $ root aquí?
- 3. ¿Por qué se requiere un vector?
- 4. ¿Por qué se requiere copy_to/from_user?
- 5. Se requiere Oracle sqlldr TRAILING NULLCOLS, pero ¿por qué?
- 6. ¿Qué significa $: << "." hacer a Ruby requiere ruta?
- 7. ¿Por qué PreparedStatement.setNull requiere sqlType?
- 8. #include <malloc.h> - Xcode
- 9. include() ¿Por qué no debería usarlo?
- 10. ¿Por qué ofstream requiere una descarga?
- 11. # include <gdiplus.h> causa de error
- 12. ¿Se requiere git svn rebase antes de git svn dcommit?
- 13. Mejor Práctica: include (o <script src ="
- 14. por qué tomcat no requiere reiniciar cuando se cambia jsp
- 15. ¿Por qué se requiere el paquete redistribuible de Visual C++?
- 16. ¿Por qué se requiere sid en 'KILL SESSION' (Oracle SQL)?
- 17. C++ #include <atlbase.h> no se encuentra
- 18. Cómo no #include <windows.h>
- 19. ¿Por qué un defun no LISP requiere una cotización antes de su argumento de parámetro?
- 20. ¿Por qué necesitamos extern "C" {#include <foo.h>} en C++?
- 21. ¿Por qué log4net 1.2.10 requiere System.Web?
- 22. Controladores anidados JavaFx (FXML <include>)
- 23. atributo layout_weight en <include> etiqueta
- 24. Sin incluir #include <ctype.h>
- 25. ¿Por qué esta consulta requiere un parámetro?
- 26. ¿Por qué C# requiere parens en condicionales?
- 27. ¿Por qué sendTextMessage requiere el permiso READ_PHONE_STATE?
- 28. # include <comutil.h> causar errores
- 29. C++ - error con include <string>
- 30. ¿Por qué boost :: equals requiere que los rangos se puedan copiar?