c - 预处理的 printf 函数

标签 c macros opencl

我正在尝试在 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/

相关文章:

java - OpenCL 在 Java 中的原生程度如何?

c - 如何使#define 使用 64 位

c++ - 在 C+ +'s ` extern "C"` block 中使用 c99

ios - XCode 预处理器宏 #if 仍然包含与符号定义为 0 相反的代码

c - 根据用户输入声明数组

c - 将 C 结构传递给 OpenCL 内核

opencl - 我怎么知道我的OpenCL内核正在GPU上运行?

c - 是否有可以指示任何类型更改的 GCC 警告?

c - 文件系统 - 内存映射文件库

macros - 带有运算符参数的定义-修改-宏