我正在尝试在 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 编译指示,因为代码中实际引用了所需的函数,即使我知道它们将被编译掉。 (从 OpenCL 2.0 开始,printf 将定义同步属性,并且无法确定是否在实际删除函数之前将同步语义引入二进制文件。)
PRINTF("Any int %d\n",i);
我正在寻找类似这样(或类似)的东西,它看起来不错,但可以完全忽略对 prtintf 的引用。
最佳答案
正如 Kerrek SB 在他的评论中所建议的那样:
#if DEBUG_CONDITION
#define PRINTF(args) printf args
#else
#define PRINTF(args)
#fi
并将其用作
PRINTF(("Debugging i: %d", i ));
感谢双括号,它不是可变参数宏。
关于c - 预处理的 printf 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18401705/