*   >> Lectura Educación Artículos >> science >> programación

Introducción a las macros en C

Casi todo el mundo ya se define una constante en C utilizando #define CONST 12345

pero sólo un grupo pequeño realmente sabe lo que hace esa línea y la forma de explorar estas características. Cada línea que comienza con # no es procesado por el compilador de C, pero por el procesador pre C que analiza estas líneas y produce el código que efectivamente ser compilado. En gcc, se puede ver el resultado de la etapa de pre-procesamiento usando gcc -E src.

cWhat la directiva definen

hace es hacer que el preprocesador reemplazar todas las apariciones de la definición por el texto que le sigue. La sustitución es puramente textual y hay algunos trucos que son realmente impresionantes. Voy a hablar de dos de ellos: las macros con funciones similares, y múltiples línea macros.Function-como macrosTo hacer una macro-función, como acaba de poner el paréntesis de costumbre después de que el nombre de la macro y sigo el nombre de sus argumentos. Los argumentos serán reemplazados por la cadena exacta que se pasa a la macro.

Un ejemplo rápido #define print_int (x) printf ("Int% d \\ n", x); Cuando se llama print_int (30), la macro se expandirá toprintf ("Int% d \\ n", 30); Multilínea Macrosa multilínea macro puede construirse poniendo un \\ al final de toda la línea de la macro. Este carácter indica que la macro continúa en la línea siguiente. SWAP #define (a, b) {\\ a ^ = b; \\ B ^ = a; \\ A ^ = b; \\} El paréntesis son necesarios porque ese bloque debe ser evaluado como una sola instrucción.

Sin ella, la siguiente fallaría:

si (a> b) SWAP (a, b) Las macros son dangerousMacros produce errores que son difíciles de depurar y difícil de parche. Las trampas posibles son muchas (errores en la precedencia de los operadores, los macros de autorreferencia, etc). Esta página ha todos ellos muy bien documentado. Esta fue una pequeña introducción a un uso más avanzado de C macros. El preprocesador es una característica de gran alcance y se puede utilizar para hacer un montón de cosas buenas. Para saber más sobre él se puede visitar este sitio.



Copyright © 2008 - 2016 Lectura Educación Artículos,https://lectura.nmjjxx.com All rights reserved.