Estoy un poco perdido en cuanto al significado de esta declaración preprocesador de C,

StackOverflow https://stackoverflow.com/questions/4478904

  •  11-10-2019
  •  | 
  •  

Pregunta

Así que, para empezar, aquí está el código, con los nombres reales de los genéricos cambiaron al límite de confusión.

/* Get the list of Hotkey commands */
#define A_COMMANDS_MACRO(a, b, c, d) a = b ,
enum {
#include "commandsFile.def"
} ;
#undef  A_COMMANDS_MACRO

Este es un fragmento de un código fuente que he estado buscando una y teniendo en cuenta que se bifurcan como una manera de familiarizarme con las complejidades de la C lenguaje de programación. Por lo tanto, a mi ojo no entrenado, esto parece no hacer nada. Para mi cerebro, definiendo algo y luego inmediatamente undefining parecería que se anulan entre sí.

Obviamente, soy consciente de que estoy equivocado. Pero ¿por qué estoy mal?

¿Fue útil?

Solución

Lo que se ve por lo general se llama X-MACRO. La técnica consiste en la definición de macros a través de #define, y luego incluyendo un archivo que hace uso de ellos con #include.

Como un ejemplo muy simple, que podría tener un encabezado (por ejemplo myheader.h ) que declaró 2 funciones en la forma de:

int foo(MYTYPE a, MYTYPE_PTR b);
void bar(MYTYPE a, MYTYPE_PTR b);

Y luego, en el código:

#define MYTYPE int
#define MYTYPE_PTR int*
#include "myheader.h"
#undef MYTYPE
#undef MYTYPE_PTR

Los #undefs son a veces en el archivo incluido también.

Para obtener más información, echa un vistazo en este enlace de Wikipedia .

Otros consejos

El archivo "commandsFile.def" probablemente usa la "A_COMMANDS_MACRO" en algún lugar macro internamente.

Recuerde que "# include" pastas esencialmente el archivo incluido en el incluido uno, por lo que el #define todavía está en efecto cuando "commandsFile.def" se procesa.

El commandsFile.def debe contener muchas líneas:

A_COMMANDS_MACRO(A_COMMAND, 10, na, na)
A_COMMANDS_MACRO(OTHER_COMMAND, 23, na, na)

Para que el código crearía una enumeración con los comandos disponibles y sus códigos.

Podría ser útil cuando este archivo .def es utilizado por un programa escrito en otro idioma, por lo que en lugar de la implementación de análisis de texto, utiliza C preprocesador para hacer esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top