versiones how from ejemplos descargar definicion compiler code caracteristicas c++ c

from - how can c++ code call ac function



Que es esto(())? (2)

En general, se usa con macros para proteger comas. Dado #define foo(a,b) , la macro invocación foo(1,2,3) sería ilegal. El uso de un par adicional de paréntesis aclara qué coma está protegida: foo((1,2),3) versus foo(1,(2,3)) .

En este caso, GTY puede tomar múltiples argumentos, separados por comas, pero todas estas comas deben estar protegidas. Es por eso que inner () rodea todos los argumentos.

Mientras navego por el código fuente del compilador gcc (gcc / c-family / c-pragma.c) veo:

typedef struct GTY(()) align_stack { int alignment; tree id; struct align_stack * prev; } align_stack;

y a pesar de tener muchos años de programación C detrás de mí, estos bits: (()) son totalmente desconocidos para mí todavía. ¿Alguien puede explicar lo que quieren decir? Google parece no encontrarlo.


Son la "magia" interna de GCC, es decir, parte de la propia implementación del compilador.

Vea esta página que habla sobre su uso. La macro se usa para marcar tipos con fines de recolección de basura. También puede haber argumentos, vea esta página para más detalles.

ACTUALIZACIÓN :: Como señaló Drew Dorman en un comentario, los dobles paréntesis reales no son parte de la "internalidad" de la implementación de GNU; se usan comúnmente cuando desea recopilar una lista completa de argumentos en un único argumento para la macro llamada. Esto puede ser útil a veces al envolver, por ejemplo, printf() . Vea esta pregunta, para más sobre esta técnica .