(printf在哪里?)乐创DIY C语言讲义​——3.1

3.1 分析“helloworld.c”代码

在第二章的讲解中,引入了一个直接输出“Hello world”的程序,这个程序被国内很多的C语言书来引用,虽然这种直接调用C语言库函数“printf”的方式一直被广泛诟病,但不可否认,这种方式最直观,因此本书也沿用了这种方式。只要从一开始就讲清楚这个“printf”函数从哪里来,就可以避免其被当成关键字了。(很多初学者一直以为这个“printf”是关键词)。

我们把之前写的代码先贴出来,如图3-1-1所示。

图3-1-1“helloworld”程序结构

这段程序里面的第一行“#include <stdio.h>”,这里的“#include”是一个预处理程序,我们之前说过程序编译的几个步骤,第一步就是预处理,而这里的#include是一个包含的预处理,它的意思是包含一个叫做“stdio.h”的文件,这个stdio.h是编译器自带的,为什么我会这么说呢,因为当#include后面用英文下面的尖括号“<xxx.h>”包含有文件时,说明这个头文件在编译器里面就已经存在,我们可以右击这个文件,然后点击“转到定义”,VS Code就自动会打开这个文件。如图3-1-2所示。虽然目前我们还是看不懂这个.h里面的内容,但是只要知道包含了这个文件确实实在计算机里面就在的就可以。

图3-1-2“stdio.h”包含路径

第二行是定义了一个函数,这个函数的名字叫做“main”,这里注意,一个C语言程序里面,你可以定义任意名字的函数,只有这个叫做“main”的函数是最特殊的,它是一个程序的入口,一个程序里面一定要有且只有一个“main”函数。这里就有朋友会问,为何C语言以“main”作为入口,而不以其他名字比如“first”之类的名字?这里告诉大家一个小秘密,如果你在开发单片机程序的时候,你可以用任意名字,但是有个前提条件,就是要更改启动文件的入口,这个我们以后再说。但是在PC上面开发C语言的时候,一定要以“main”命名,而且再次申明,C语言是一门严格区分大小写的编程语言,所以一定要以一定要以小写的“main”命名。因此,当我们在阅读别人的C语言代码时,第一件事情什么都不干直接找main函数。

第三行是一个大括号,这个大括号和第五行的那个大括号一样,这个和语句有关,我们以后再来说。

最后,来说一下这个程序里面最最关键的第四行,这个第四行“printf();”是C语言里面的语句,语句是具体用来实现某一项具体功能的,比如这里的“printf();”就是在终端上面打印出一行字符。但是大家注意一下,这个“printf();”在这里我们没有具体去写出它的打印流程,这是因为操作系统已经帮我们完成“printf();”的打印功能了,我们使用时只需要在这里调用一下就可以了(你可以认为是“召唤”某个上古神兽)。

我们来具体看下操作系统具体给用户提供了哪些福利。除了任务调度,内存管理等等我们看不见的地方,最为实在的就是这些库函数。但是注意,这里的库函数提供给你的不是具体的代码,而是一个个操作系统内部的功能,那这样就会存在一个问题,我们在使用的时候怎么知道它的函数名字呢?这里就想了一个办法,我们把操作系统提供的功能进行分类,比如打印到终端,这是一个基本的标准输入输出功能,因此把所有输入输出相关的函数都登记到一个叫做“stdio.h”的文件内,如果谁要使用这些输入输出函数,就需要包含这个头文件,然后编译器会在预处理的时候,根据这些包含的头文件在最终链接的时候,把C语言库函数链接进来。我们试着来找一下“printf();”在那个头文件里。操作方式还是一样,在VS Code里面找到“printf();”函数,右击,选择“转到定义”,如图3-1-3所示。我们惊奇地发现,在“stdio.h“里面存在一个叫做“printf();”的函数。

图3-1-3“printf();”函数定义

+++++好书推荐+++++

推荐指数:

推荐理由:

《乌合之众:大众心理研究(英汉双语版)》是社会心理学领域中最具影响力的著作,他对群体性格特征的预测在后世都得到了很好的印证,是一本值得每个人研读、思考的好书。

(0)

相关推荐