任务
请你实现一个打印“漂亮日志格式”的方法。
首先我们先说“日志”的作用,程序中的“日志”,通常是指在程序运行过程中,输出的一些与程序当前状态或者数据相关的一些信息。这些信息,可以帮助程序开发人员做调试,帮助运营人员做数据分析,帮助管理人员分析日活等等。总而言之,一份合理的日志信息,是非常有价值的数据。而我们今天呢,接触一种最简单的日志形式,就是程序运行过程中的调试信息。
请你实现一个参数形式和 printf 函数一样的 log 方法,用法如代码所示:
1 |
|
你会看到上述代码中,有一个和 printf 名字不一样可用法完全一样的方法叫做 log,而这个 log 的输出结果,和 printf 可不一样。
具体如下:
1 | a = 123 |
你会看到 log 的方法,虽然和 printf 函数的用法一致,可在输出内容中,log 方法的输出明显比 printf 函数的输出要多了一些信息。
编码
如何定义一个支持可变参数的log宏:
1 |
所以可以将 log 方法的使用方式与 printf 类似了:
1 |
实现
1 |
|
思考题
1,没有 Bug 的 MAX 宏
请你完善下面代码中的 MAX 宏,MAX 宏的作用,就是接受两个元素,选择出两个元素中的最大值。
完善以后的 MAX 宏,输出需要与如下给出的输出样例一致,注意,只能修改 MAX 宏的定义内容,不可以修改主函数中的内容。
1 |
|
实现(思考过程是重点)
1 |
小结
- C 语言的程序编译是一套过程,中间你必须搞懂的有:预处理阶段,编译阶段和链接阶段。
- 程序最终的功能,是由“待编译源码”决定的,而“待编译源码”是由各种各样的预处理命令决定的。
- 预处理命令之所以被称为“黑魔法”,是因为编译器会根据预处理命令改变你的源代码,这个过程,神秘而具有力量,功能强大。
- 代码中反斜杠的后面,不能出现任何其他内容。
- 宏定义只占用一行代码,为了增强宏定义的代码可读性,我们可以采用在行尾加反斜杠的技巧,来使得上下两行代码,变成编译器眼中的一行代码。
- 宏的作用,就是替换,要想理解最终的代码行为,必须从宏替换以后的代码入手分析。
- 条件编译相当于一种预处理阶段的代码剪裁技巧。
- 编译器预设的宏,有标准的,也有非标准的,非标准的代码会影响其可移植性。