合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
利用可变参数的特性,我们可以实现一个日志功能,输出带有文件名,函数名,行号的一个接口来代替printf的功能;再linux c中,可以用三个宏来分别表示文件名:**\_\_FILE\_\_**;函数名:**\_\_func\_\_**;行号:**\_\_LINE\_\_**;有了这三个宏,我们再把用户输出的内容拼接进入,就可以完成一个带格式的日志功能了,首先声明并实现一个函数logd如下: ![](https://img.kancloud.cn/9f/1b/9f1b5dc6c558d16a7c96526b80962a12_832x416.png =600x) ### 这个函数的参数列表包括:文件名file,函数名func,行号line,剩下的format和一个可变参数;可变参数的解析结构和上节课一样,多出一个新的接口函数是vsprintf,这个接口是把可变参数的内容格式化为一个字符串。 ### 为了简化调用,我们定义一个宏LOG,这个宏主要的作用是自己填充文件名,函数名,行号,简化调用过程: ![](https://img.kancloud.cn/79/b2/79b2eff51d9cad6897534ab8f68f26d5_832x94.png =600x) ### 最后是使用的方法: ![](https://img.kancloud.cn/0e/65/0e6583665fe7778d313dcb1b9aa08070_536x216.png) ### 编译运行: ![](https://img.kancloud.cn/ee/95/ee95f9539b60f8e0d95964cf4d838dfb_832x238.png =600x)