如何将printf()包装到函数或宏中?
发布时间:2020-12-16 09:10:59 所属栏目:百科 来源:网络整理
导读:这听起来有点像面试问题,但实际上是一个实际问题. 我正在使用嵌入式平台,并且仅提供这??些功能的等价物: printf() snprintf() 此外,printf()实现(和签名)很可能在不久的将来发生变化,因此对它的调用必须驻留在一个单独的模块中,以便以后易于迁移. 鉴于这些,
这听起来有点像面试问题,但实际上是一个实际问题.
我正在使用嵌入式平台,并且仅提供这??些功能的等价物: > printf() 此外,printf()实现(和签名)很可能在不久的将来发生变化,因此对它的调用必须驻留在一个单独的模块中,以便以后易于迁移. 鉴于这些,我可以在一些函数或宏中包装日志记录调用吗?目标是我的源代码调用THAT_MACRO(“兔子数:%d”,numBunnies);在一千个地方,但只能在一个地方看到对上述功能的调用. 编译器:arm-gcc -std = c99 解决方法
既然您可以使用C99,我将其包装在
variadic macro中:
#define TM_PRINTF(f_,...) printf((f_),__VA_ARGS__) #define TM_SNPRINTF(s_,sz_,f_,...) snprintf((s_),(sz_),(f_),__VA_ARGS__) 因为你没有说你有vprintf或类似的东西.如果你确实有这样的东西,你可以将它包装在谢尔盖L在他的答案中提供的功能中. 编辑: 上述TM_PRINTF不适用于空的VA_ARGS列表. #define TM_PRINTF(f_,##__VA_ARGS__) 如果__VA_ARGS__为空,则两个##符号删除它们前面的多余逗号. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |