我正在尝试在 OpenCL 内核中创建透明的调试 prtinf 函数:
- 不要污染代码(最多可以从一行调用)。
- 如果指定的预处理器条件被证明不正确,则编译掉。
问题是,printf 是一个可变参数函数,我不能将它包装在可变参数宏中,因为 OpenCL 内核语言(C99 派生)不支持可变参数宏。
#if DEBUG_CONDITION
printf("Any int %d\n",i);
#endif
会工作,但会很快使代码不可读。
if(DEBUG_CONDITION) printf("Any int %d\n",i);
这也可以,但需要我启用 printf pragma,因为需要的函数实际上在代码中被引用,即使我知道它们会被编译掉。(从 OpenCL 2.0 开始,printf 将定义同步属性,并且无法确定在实际删除函数之前是否将同步语义引入二进制文件。)
PRINTF("Any int %d\n",i);
我正在寻找看起来不错的类似(或类似)的东西,但可以完全忽略对 prtintf 的引用。