当将CUDA内核调用作为参数宏传递时,预处理器宏中的参数数量不正确

问题描述 投票:0回答:1

我有以下宏

#define TIMEIT( variable, body ) \
variable = omp_get_wtime(); \
body; \
variable = omp_get_wtime() - variable;

我用来非常简单地计时代码段。但是,宏调用对逗号敏感,并且CUDA内核调用(使用三重人字形语法)使预处理器相信该宏正在传递两个以上的参数。

有没有解决的办法?

cuda macros c-preprocessor preprocessor nvcc
1个回答
0
投票

自C99 / C ++ 11起,您可以使用可变参数(varargs)宏来解决此问题。您使用...作为最后一个参数来编写varargs宏;在宏的正文中,__VA_ARGS__将替换为宏调用中的尾随参数,并保留逗号:

#define TIMEIT( variable, ... )   \
    variable = omp_get_wtime();   \
    __VA_ARGS__;                  \
    variable = omp_get_wtime() - variable;
© www.soinside.com 2019 - 2024. All rights reserved.