Ecco una macro in grado di calcolare il conteggio degli argomenti. e il codice come:qual è il significato di questa macro C?
#define Y_TUPLE_SIZE_II(__args) Y_TUPLE_SIZE_I __args
#define Y_TUPLE_SIZE_PREFIX__Y_TUPLE_SIZE_POSTFIX ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0
#define Y_TUPLE_SIZE_I(__p0,__p1,__p2,__p3,__p4,__p5,__p6,__p7,__p8,__p9,__p10,__p11,__p12,__p13,__p14,__p15,__p16,__p17,__p18,__p19,__p20,__p21,__p22,__p23,__p24,__p25,__p26,__p27,__p28,__p29,__p30,__p31,__n,...) __n
#define MPL_ARGS_SIZE(...) Y_TUPLE_SIZE_II((Y_TUPLE_SIZE_PREFIX_ ## __VA_ARGS__ ## _Y_TUPLE_SIZE_POSTFIX,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0))
// the running result ---------------------------------------
MPL_ARGS_SIZE(a,b,c,d,e,f,g)==7
MPL_ARGS_SIZE(a,b,c,d)==4
come capire
#define Y_TUPLE_SIZE_PREFIX__Y_TUPLE_SIZE_POSTFIX ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0
e
Y_TUPLE_SIZE_PREFIX_ ## __VA_ARGS__ ## _Y_TUPLE_SIZE_POSTFIX
?
BTW, so di ## (libbra, sterlina) l'utilizzo e il meccanismo di #define Y_TUPLE_SIZE_I
Questo è un set di macro piuttosto pazzo ... – immibis
Stai solo formando un gruppo di argomenti vuoti da passare (e 0). Dopo averli concatenati, ottieni un elenco di argomenti. Tuttavia, sembra leggermente più del necessario per una macro counter counter. Immagino che la macro che stai chiedendo probabilmente gestisca il caso di 'MPL_ARGS_SIZE()' per dare 0 invece di 1. – chris
@chris no, gli argomenti vuoti entrano in gioco solo se non vengono forniti argomenti. È un caso speciale. Nel caso normale, non ci sono argomenti vuoti. –