Datos sobre macros y preprocesadores en C
Datos sobre macros y preprocesadores en C
En un programa en C, todas las líneas que comienzan con # son procesadas por el preprocesador, que es un programa especial invocado por el compilador. En un término muy básico, el preprocesador toma un programa C y produce otro programa C sin ningún # .
Los siguientes son algunos datos interesantes sobre los preprocesadores en C.
1) Cuando usamos la directiva include , los contenidos del archivo de encabezado incluido (después del preprocesamiento) se copian en el archivo actual.
Los corchetes angulares < y > indican al preprocesador que busque en la carpeta estándar donde se encuentran todos los archivos de encabezado. Las comillas dobles " y " indican al preprocesador que busque en la carpeta actual (directorio actual).
2) Cuando usamos define para una constante, el preprocesador produce un programa en C donde se busca la constante definida y los tokens coincidentes se reemplazan con la expresión dada. Por ejemplo en el siguiente programamax se define como 100.
1) Cuando usamos la directiva include , los contenidos del archivo de encabezado incluido (después del preprocesamiento) se copian en el archivo actual.
Los corchetes angulares < y > indican al preprocesador que busque en la carpeta estándar donde se encuentran todos los archivos de encabezado. Las comillas dobles " y " indican al preprocesador que busque en la carpeta actual (directorio actual).
2) Cuando usamos define para una constante, el preprocesador produce un programa en C donde se busca la constante definida y los tokens coincidentes se reemplazan con la expresión dada. Por ejemplo en el siguiente programamax se define como 100.
4) Los argumentos macro no se evalúan antes de la expansión macro. Por ejemplo, considere el siguiente programa
El problema anterior se puede resolver usando el siguiente programa
5) Los tokens pasados a las macros se pueden concatenar usando el operador ## llamado operador Token-Pasting.
6) Un token pasado a macro se puede convertir en un literal de cadena usando # antes.
7) Las macros se pueden escribir en varias líneas usando '\'. La última línea no necesita tener '\'.
8) Las macros con argumentos deben evitarse ya que a veces causan problemas. Y las funciones en línea deben preferirse ya que hay una evaluación de parámetros de verificación de tipo en las funciones en línea. A partir de C99 , las funciones en línea también son compatibles con el lenguaje C.
Por ejemplo, considere el siguiente programa. Desde el primer vistazo, la salida parece ser 1, pero produce 36 como salida.
Por ejemplo, considere el siguiente programa. Desde el primer vistazo, la salida parece ser 1, pero produce 36 como salida.
Si usamos funciones en línea, obtenemos el resultado esperado. También el programa dado en el punto 4 anterior puede corregirse utilizando funciones en línea.
9) Los preprocesadores también admiten directivas if-else que generalmente se usan para la compilación condicional.
10) Se puede incluir un archivo de encabezado más de una vez directa o indirectamente, esto lleva a problemas de redeclaración de las mismas variables / funciones. Para evitar este problema, como las directivas definidas , ifdef y ifndef se utilizan.
11) Hay algunas macros estándar que se pueden usar para imprimir el archivo de programa (__FILE__), la fecha de compilación (__DATE__), la hora de compilación (__TIME__) y el número de línea en el código C (__LINE__)
11) Hay algunas macros estándar que se pueden usar para imprimir el archivo de programa (__FILE__), la fecha de compilación (__DATE__), la hora de compilación (__TIME__) y el número de línea en el código C (__LINE__)
12) Podemos eliminar macros ya definidas usando:
#undef MACRO_NAME
#undef MACRO_NAME
El siguiente programa se ejecuta correctamente ya que hemos declarado LIMIT como una variable entera después de eliminar la macro LIMIT definida previamente
Otro hecho interesante sobre el uso de macro ( #undef )
No hay comentarios.