【发布时间】:2014-01-05 12:55:31
【问题描述】:
这听起来像是一个面试问题,但实际上是一个实际问题。
我正在使用嵌入式平台,并且只有这些功能的等价物:
- printf()
- snprintf()
此外,printf() 实现(和签名)可能会在不久的将来发生变化,因此对其的调用必须驻留在单独的模块中,以便以后轻松迁移。
鉴于此,我可以将日志调用包装在某个函数或宏中吗?目标是我的源代码在一千个地方调用THAT_MACRO("Number of bunnies: %d", numBunnies);,但对上述函数的调用只在一个地方看到。
编译器:arm-gcc -std=c99
编辑:只是提一下,但在 2000 年的最佳实践之后,可能更早,内联函数比宏要好得多,原因有很多。
【问题讨论】:
-
你的编译器支持可变参数宏吗?
-
有哪些编译器限制?如果这必须在 C99 之前的 C 版本上运行,则很难作为宏移植。
-
@KerrekSB 我想为什么?这几天 cmets 被屏蔽了?