我有以下宏
#define TIMEIT( variable, body ) \
variable = omp_get_wtime(); \
body; \
variable = omp_get_wtime() - variable;
我用来非常简单地计时代码段。但是,宏调用对逗号敏感,并且CUDA内核调用(使用三重人字形语法)使预处理器相信该宏正在传递两个以上的参数。
有没有解决的办法?
自C99 / C ++ 11起,您可以使用可变参数(varargs)宏来解决此问题。您使用...
作为最后一个参数来编写varargs宏;在宏的正文中,__VA_ARGS__
将替换为宏调用中的尾随参数,并保留逗号:
#define TIMEIT( variable, ... ) \
variable = omp_get_wtime(); \
__VA_ARGS__; \
variable = omp_get_wtime() - variable;