#define STAT_APPLY(XX)\ XX(nfds_cnt)\ XX(nfds_sum)\ XX(nfds_max)\ XX(yield_cnt) #define STAT_STRUCT_FN(name) size_t name; struct { STAT_APPLY(STAT_STRUCT_FN) } stats; #define STAT_PRINT_FN(name) printf ( #name ": %zu\n", stats. name); void report_stat () { STAT_APPLY(STAT_PRINT_FN); }