Функционально-подобные макросы могут быть использованы достаточно чисто, чтобы обойти проблему аргумента:
#define loop_wrapper(func) \
for(int i = 0; i<5000; i++){func;}
#define time_wrapper(func) \
clock_t start, end; \
double cpu_time_used; \
start = clock(); \
func; \
end = clock(); \
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC * 1000; \
printf("Execution time %f ms\n", cpu_time_used);
int main(void){
time_wrapper(loop_wrapper((DUT()));
}
Выходная информация препроцессора будет сведена к одной строке.Не должно быть проблемой, так как этот вывод не должен быть прочитан людьми.
clock_t start, end; double cpu_time_used; start = clock(); for(int i = 0; i<5000; i++){DUT();}; end = clock(); cpu_time_used = ((double) (end - start)) / ((clock_t) 1000000) * 1000; printf("Execution time %f ms\n", cpu_time_used);;