Preprocesador y encabezados
12 pasos en 5 series de C.
El preprocesador es una pasada de sustitución de texto que corre antes de que el compilador tenga la menor idea de qué significa tu programa, y la mayoría de los rincones más extraños de C viven aquí. Macros, conversión a cadena y pegado de tokens, guardas de inclusión y compilación condicional, y assert.
Doce pasos. Aprende lo que puede hacer, y luego usa bastante menos de lo que ya sabes usar.
Macros
- Macros tipo objetoUn define es sustitución textual, hecha antes de que el compilador vea tu código.
- Por qué las macros llevan paréntesisLa sustitución ignora la precedencia: cada parámetro y el cuerpo entero van entre paréntesis.
- La macro de longitud de arregloLa macro que todo proyecto de C tiene, y el único lugar donde no debe usarse.
- static inline en headersUna función chica en un header debe ser static inline, o cada archivo que lo incluye choca.
Manipulación de texto
- Stringify y pegado de tokensEl operador # vuelve un argumento una cadena; ## une dos tokens en uno.
- Macros variádicas__VA_ARGS__ reenvía cualquier número de argumentos; así funcionan las macros de logging.
- X-macrosUna lista, varias expansiones: la tabla y el código quedan en sintonía por construcción.
Encabezados y condiciones
- Guardas de inclusiónUn header puede incluirse muchas veces, así que debe protegerse a sí mismo.
- Compilación condicionalEl preprocesador puede incluir o descartar regiones enteras según qué esté definido.
Aserciones
- assert y NDEBUGassert documenta un invariante y lo verifica, hasta que NDEBUG lo elimina por completo.
- Aserciones en tiempo de compilación_Static_assert verifica una expresión constante al compilar: las builds malas fallan temprano.
Bis
- tour_header.cUn header y su implementación en un archivo, mostrando la división de un proyecto real.