Sin embargo se sigue recomendando usar la misma nomenclatura por cuestiones de claridad en el código.
#include normalmente obliga a usar protectores de #include o la directiva #pragma once para prevenir la doble inclusión, porque si se incluye más de 1 vez el mismo archivo, (dependiendo del contenido) puede causar que se intente declarar varias veces las mismas funciones o tipos de variable, lo que va a generar un error al compilar, esto se intenta prevenir de la siguiente forma: Como resultado, al intentar inclurse el archivo por segunda vez, la operación "ifndef" va a dar falso porque __ARCHIVO_H__ ya estaba definido de la primera vez que se incluyó, y a consecuencia se saltea todo el bloque hasta llegar al "endif" que suele estar al final del archivo.
Las directivas #ifdef, #ifndef, #else, #elif y #endif pueden usarse para realizar compilaciones condicionales.
Cada vez que el identificador aparezca en el código fuente será reemplazado por la lista de tokens.
Esto permite distinguir fácilmente entre macros y funciones compiladas en el código fuente.
Si se omite alguno de estos pueden darse efectos no deseados más tarde.
Y, además, que no sea específico del tipo de datos.
Con ANSI C no hay una solución general para afrontar el efecto colateral de los argumentos en macros.
Esto se puede usar para construir macros muy elaboradas que actúen casi como las templates de C++.
Se puede incluir en la definición de la macro pero entonces nos encontraremos con líneas en el código sin punto y coma al final.
O, aún peor, el usuario puede estar tentado a incluir puntos y coma de todas formas.
La que se pretende printf y una sentencia vacía en cada rama de la construcción if/else.
Adecuadamente usadas las macros con varias líneas pueden reducir mucho el tamaño y la complejidad del código fuente de un programa en C. Así se aumenta la legibilidad y mantenibilidad del código.
Aunque una cadena pasada a una macro no esté encerrada entre comillas se puede tratar como si lo estuviese usando la directiva "#".
El ANSI C no permite macros que tengan un número variable de argumentos.
Cuando se quiera añadir un nuevo comando tan solo habrá que modificar el archivo de cabecera donde hemos definido la Macro X (normalmente con la extensión .def) y definir un nuevo gestor para ese comando.
También es útil cuando tienes el código muy parametrizado y quieres saber si un #define particular se ha introducido desde el makefile.
Como aquí: También se pueda usar la directiva #warning para mostrar mensajes en la salida del compilador sin para el proceso.
Un uso para esto es mostrar código antiguo que no debería utilizarse pero se hace por razones de compatibilidad.
Aunque el texto de las directivas #error y #warning no tiene que estar entrecomillado es una buena práctica usarlo.