¿Por qué # define una macro vacía?

Porque a veces veo

#define __Empty_macro__ 

Cía ? ¿Para qué sirve? ex.

 #ifndef _BUILDIN_H_ #define _BUILDIN_H_ //codes never used _BUILDIN_H_ ... #endif /* _BUILDIN_H_ */ 

ex source es un implemento de shell: https://github.com/dingdongnigetou/shell/blob/master/include/build_in.h

Debido a que todavía existe una “macro vacía” y es posible verificar si existen usando #ifdef o #ifndef .

Normalmente, este comportamiento se usa para evitar que se incluyan varias copias del mismo encabezado (también conocido como “incluir guardas”, que es su ejemplo). Sin embargo, también se puede utilizar para incluir condicionalmente ciertas partes de un progtwig.

A veces, las macros como NDEBUG o _DEBUG simplemente definidas pueden cambiar la salida del progtwig, como la inclusión de controles de tiempo de ejecución más costosos que serían indeseables en el producto final, pero podrían ayudar a rastrear errores durante el desarrollo.

Las definiciones “vacías” personalizadas pueden usarse de manera similar para incluir o excluir ciertas funciones binarias de la comstackción del progtwig. Esto se podría hacer por rendimiento (eliminación del registro), seguridad (eliminación de partes confidenciales del progtwig), razones comerciales (algunas características pueden requerir versiones más caras del progtwig), etc.

Hay diferentes razones para usarlos. Por ejemplo si necesita incluir alguna biblioteca solo una vez. Podrías definir una macro. A continuación, verifica si esa macro se ha definido, por lo que omite la inclusión. Y así.

Aquí hay una explicación sobre: guardia de inclusión.

En los C++ progtwigción C y C++ , una guarda #include , a veces llamada macro guard , es una construcción particular que se utiliza para evitar el problema de la double inclusion cuando se trata de la directiva de inclusión. La adición de #include guardias a un archivo de encabezado es una forma de hacer que ese archivo sea idempotente. Por ejemplo, considere que desea incluir los archivos de cabecera grandfather.h y father.h en el archivo child.h .

Archivo “abuelo.h”

 #ifndef GRANDFATHER_H #define GRANDFATHER_H struct foo { int member; }; #endif /* GRANDFATHER_H */ 

Archivo “padre.h”

 #include "grandfather.h" 

Archivo “child.c”

 #include "grandfather.h" #include "father.h" 

Aquí, la primera inclusión de "grandfather.h" hace que se defina la macro GRANDFATHER_H . Luego, cuando “child.c” incluye a “grandfather.h” la segunda vez (como father.h también incluye a grandfather.h ) al incluir father.h , la prueba #ifndef devuelve false, y el preprocesador salta al #endif del archivo grandfather.h , evitando así la segunda definición de struct foo. Y el progtwig comstack correctamente.