2012-05-30 23 views
5

Si uso de macros en mi código C, tales como¿Dónde se almacenan las macros?

#define var 10 

entonces dónde son exactamente los almacena en el espacio asignado al proceso por el núcleo? ¿En montón o BSS o datos globales? ¿O es solo un reemplazo de texto para var en uno de los pasos del compilador?

Respuesta

14

Sí.
el último

sólo un reemplazo de texto

Se realiza un procesamiento previo pase. Algunos buenos detalles se pueden encontrar here

+0

No creo que el reemplazo de texto sea bastante justo. Puede trabajar con listas de parámetros y tal. –

+0

Sí. Las macros son útiles para muchas cosas. La operación es un poco confusa sobre el pase cpp. El reemplazo de texto es lo que sucede. – EvilTeach

+0

@AndrewWhite: el preprocesador es complicado, pero solo hace una conversión de texto a texto. Por ejemplo, en los sistemas Unix, es posible ejecutar el preprocesador por separado del compilador e incluso puede usar el preprocesador C para algunos archivos que no sean C. – hugomg

4

directivas del preprocesador como #define se sustituyen por el texto correspondiente en la fase de pre-procesamiento de compilación, y son (casi) nunca se representan en el ejecutable final.

0

Es una instrucción para el compilador, y por lo tanto se almacena en tablas en el espacio de proceso del compilador, no en el espacio de su código.

+0

El compilador nunca lo ve. El pase del preprocesador lo come. – EvilTeach

3

Las "macros" son una "cosa de tiempo de compilación".

Simplemente "reemplaza el texto" que el compilador ve antes de compilar.

El resultado (en el código compilado) puede ser un conjunto de operaciones ... una declaración de datos ... o nada en absoluto.

Pero la "macro" en sí misma es Historia antigua después de que finaliza el preprocesador, y antes de que realmente comience la compilación.

0

Las macros son meramente reemplazos de texto. Cuando se sustituyen, estos se convierten en una parte del código y, por lo tanto, se almacenan en SEGMENTO DE CÓDIGO.

Cuestiones relacionadas