【发布时间】:2018-02-07 05:46:43
【问题描述】:
我找不到将第一个 printf 合并到第二个的方法:
unsigned get_time_now(void) {return 1;}
#define DEBUG_PRINT 1
#define debug_tcprintf(fmt, ...) do { \
if (DEBUG_PRINT) { \
unsigned p_time_now = get_time_now(); \
printf ("%u ms ", p_time_now); \
printf(fmt, __VA_ARGS__); \
} \
} while (0)
我需要完成此操作以获得原子 debug_tcprintf。上面的宏取自this Stack Overflow question。
我正在编写在 XMOS 多逻辑核处理器上运行的 XC 代码。它编译 XC、C 和 C++,但代码示例来自 C 代码部分。它与 XC 类似,只是它在语言中定义了一个计时器。
如果无法将两者合并到一个 printf 中,一个选项可能是创建一个字符串并使用 sprintf 代替?我宁愿不要,因为这样的数组很容易溢出。
【问题讨论】:
-
对于初学者,为什么不直接
printf("%u ms " fmt, p_time_now, __VA_ARGS__);? -
是的,已删除评论。我明白你在做什么。 “原子” printf 声明让我挑了挑眉。这对我来说意味着不同的东西:)
-
@MichaelDorgan:当然,在 OP 意识到不存在这样的事情之前需要更长的时间。
-
等一下,我加了一个逗号。立即测试
-
@ØyvindTeig: works for me
标签: c printf c-preprocessor variadic-macros