10预处理命令上

预处理命令上

程序中的“日志”,通常是指在程序运行过程中,输出的一些与程序当前状态或者数据相关的一些信息。这些信息,可以帮助程序开发人员做调试,帮助运营人员做数据分析,帮助管理人员分析日活等等。总而言之,一份合理的日志信息,是非常有价值的数据。

#include <stdio.h>

void func(int a) {
    log("a = %d\n", a);
}

int main() {
    int a = 123;
    printf("a = %d\n", a);
    log("a = %d\n", a);
    func(a);
    return 0;
}

结果为:

a = 123
[main, 10] a = 123
[func, 4] a = 123

log 方法的输出中,会输出额外的两个信息:一个是所在的函数名称信息,在主函数中的 log 方法就会输出 main 主函数的名称,在 func 函数中的 log 方法,就会输出 func 函数的名称;除了函数名称信息以外,另一个就是多了一个 log 函数所在代码第几行的信息,第一个执行的 log 在代码的第 10 行,就输出了个 10,第二个 log 执行的时候,在代码的第 4 行,就输出了个 4。

1. 认识预处理命令家族

预处理命令家族,也有自己的特殊符号,那就是以 # 作为开头的代码

include 就是预处理命令家族中的一员

C 语言程序从源代码到可执行程序的过程

三个环节就是:预处理阶段,编译阶段,链接阶段。三个阶段从前到后依次执行,完成整个 C 语言程序的编译过程,上一个阶段的输出就是下一个阶段的输入。

2. 预处理阶段

预处理阶段的输入和输出内容,输入内容是“源代码”就是你写的程序,输出内容是“待编译源码”。之所以叫做“待编译源码”,那是因为这份代码,才是我们交给编译器完成后续编译过程的真正的代码。它是由预处理器处理完“源代码”中的所有预处理命令后,所产生的代码,这份代码的内容跟“源代码”相比,已经算是面目全非了。

include 是我们所谓的预处理命令家族中的一员,它真正的作用,是在预处理阶段的时候,把其后所指定文件中的内容粘贴到相应的代码处。

如果要分析最终程序的功能,不是分析“源代码”,而是要分析“待编译源码”,也就是说,是“待编译源码”决定了程序最终功能。

要想搞清楚待编译源码,就必须要理解预处理阶段做的事情,也就是各种预处理命令的作用。这些预处理命令,会在编译过程中,帮你改变你的代码,更形象化一点儿,就是仿佛是编译器在帮你修改代码一样。

小结

  1. C 语言的程序编译是一套过程,中间你必须搞懂的有:预处理阶段,编译阶段和链接阶段。
  2. 程序最终的功能,是由“待编译源码”决定的,而“待编译源码”是由各种各样的预处理命令决定的。
  3. 预处理命令之所以被称为“黑魔法”,是因为编译器会根据预处理命令改变你的源代码,这个过程,神秘而具有力量,功能强大。
posted @ 2020-03-31 23:06  insist钢  阅读(131)  评论(0编辑  收藏  举报