C语言快速入门 - Hello World 详解

目录

  • C语言快速入门
  • C语言快速入门 - Hello World 详解
  • C语言快速入门 - 变量
  • C语言快速入门 - 简单运算符
  • C语言快速入门 - 控制语句

开始

上文我们讲了C语言的大致情况,以及编程的环境的搭建。而本文则着重讲解最基本的C语言程序 - Hello World

程序

#include 

int main()
{
    printf("Hello World!\n");
    return 0;
}

首先,我们来看下这个程序的核心printf

观察一下printf这个单词,我们可以发下,这个f显得格格不入,这明显不是一个单词,所以我们把他分开来看,先百度下print的意思吧。

print

v. 在纸上印;打印;印刷;登载;刊登;发表

那么,我们可以把屏幕理解为一张纸,而printf就可以把括号里面的双引号里的内容打印到屏幕上来。

那么f又是什么意思呢,它是format的缩写。format是格式化的意思,那么printf意思就是以一定的格式输出文字到屏幕上,具体是怎么样个格式化法,大家在学习变量的时候就会知道了。

同时,我们将输出的内容和这个双引号里面的内容对比,可以发现,还是有一点区别的。我们输出的是Hello World!,而不是Hello World!\n,也就是说\n去哪里了呢?

如果大家了解过一点ASCII字符表(这里补充下什么是字符表:由于电脑内部储存信息的是二进制编码,而二进制和数字之间转换还是容易的,但是对于字母等符号,转就无法转换成二进制了,所以聪明的计算机科学家就想出了一个办法,将数字和字母对应起来,构成一张表,这样,电脑就能很方便的储存字符了。比如小写字母a对应的就是数字97,大写字母A则对应的是65。具体的还是希望点开那个蓝色的ASCII去看下百度百科里是怎么说的。)的话,应该知道,并不是所有字符都是可以看得到的,有些甚至还是起到控制的作用的。

而我们这里的\n就是一个特殊的字符,它的作用便是换行

我们可以试下,不加\n会怎么样。

我们可以看到,编译运行后的结果是这样的,他没有换行,显得十分不美观。

编译运行
而加了 \n就显得十分美观了。
C语言快速入门 - Hello World 详解_第1张图片
运行结果
以后的学习中我们还可能遇到别的 转义字符,具体的格式就是以 \开头,后面跟一个别的字字符,详见蓝字里的百度百科。

printf("Hello World!\n");别忘了每句话的最后要加一个分号!!;的作用就是用于区分每个语句的,所以我们打完一个语句就要用分号来告诉编译器,我们这句话结束了。

那么,为什么printf后面要加个括号呢,这里我们得引入函数的概念。

函数

我们都学过数学里的函数的概念,初中我们接触到的函数便是形如之类的,而到了高中,函数变了个样,但换汤不换药。那么,到了程序的世界里,函数就和后者很相似了。

本文不会很详细的介绍函数,但会将这个概念介绍给大家。

我们回到刚刚的那个printf中,看下他的结构。

首先,用双引号括起来的是文本,他是一个整体:"Hello World",而剔除这部分,剩下来便是printf函数的主体了:printf() 。是不是和神似呢?

区别在于,我们所熟知的他的只能是个数字,而在程序里它可以是任何东西,而printf()里的那个“”便是字符串(一堆字符的合集)

那么,里的去了哪里呢,其实printf这个函数将我们的字符打印到屏幕上的这个功能便是对应的。

这么一说,大家是不是对函数有了初步的认识了呢?

除了printf(),我们的程序中还有一个函数,那就是main函数,关于它的更多信息,本文暂时不介绍(一开始就讲那么多关于函数的知识不利于理解)

至于那个return 0;,它和函数的关系也甚为密切,本文也暂时不讲。


然后我们来看下第一行#include

我们还是先百度翻译include的意思。

include

v. 包括;包含;使成为…的一部分

也就是说,这句话是想来让我们的C语言文件来包含一个东西,那这个东西自然就是我们后面跟上的 ,而stdio.h分明就是以stdio为名,类型是h的文件啊。

这里,我们将再引入一个概念:头文件。而这个stdio.h正是这个头文件。

什么是头文件呢?我们赶紧看看下文吧。

头文件

其实上来就说头文件不是特别好,但是提前讲这个的概念确实可以帮助大家对C语言有一个更加深入的理解。

首先,我们先对这个Hello World程序进行一定的修改,也就是把第一行去了:

int main()
{
    printf("Hello World!\n");
}

然后我们在编译的时候就会爆出这么一串警告。

hello_world.c: In function ‘main’:
hello_world.c:3:2: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
  printf("Hello World\n");                                                                                                
  ^~~~~~
hello_world.c:3:2: warning: incompatible implicit declaration of built-in function ‘printf’
hello_world.c:3:2: note: include ‘’ or provide a declaration of ‘printf’

用中文来说,就是我们的编译器在尝试翻译我们的代码时,找不到printf是什么意思,他翻译不出来。

虽然说这个程序也是可以运行的,为什么呢,因为现在的编译器比较智能,它可以自动的在编译的时候帮你添加缺失的基本头文件,所以,你这样编译完之后的程序也能输出Hello World的。

那么为什么加了头文件编译器就能翻译成功了呢。

秘密,就在于头文件可以告诉编译器printf是什么,他能告诉编译器他能做什么,简单的,我们就可以把他理解为它是一张清单,里面列出了一些函数,可以教会编译器去怎么来翻译我们的C语言文件。

这就是头文件的作用。


那么,我们再回到那句#include 吧。

现在,我们已经知道了,这句话的作用是教会编译器输出文字,而stdio.h相当于一本教科书,编译器能够看懂它。

我们再来谈谈为什么要在include之前加一个#吧。

其实,这个#可以帮助编译器区分预处理器指令和普通的代码,其实也就是说,以#开头的代码叫做预处理器指令,是一种特殊的代码,为什么说它特殊呢?因为编译器首先看的就是以#开头的代码,然后再看我们的主体代码的,他有着“优先权”。

再来,就是这本“教科书”的名字了——stdio.h.h很好理解,一个文件的后缀,header的缩写,代表的他是一个头文件。而stdio呢,我们再次开始我们的单词查询法(顺便提一下,计算机对英文要求很高,尤其是单词简写,要有一定的敏感性):首先stdstandard的简写,是标准的意思,而io则是两个单词的缩写,分别是inputoutput,分别代表输入输出,所以stdio便是标准输入输出的意思,它里面定义了一些输入和输出的函数,比如我们的printf函数便是其中的标准输出函数之一。

那么,为什么是用<>而不是用""stdio.h括起来呢,这里也是有区别的。在操作系统(一般指(类)Unix系统)内部,有着固定的地方存放头文件,而<>就是让C语言编译器去那个固定的地方读取头文件,而不是别的地方。

所以#include 就是让C语言编译器去那个特定的地方读取我们的标准输入输出头文件。

那么至于#include "文件名"呢,他则是从我们存.c的源代码文件的同一目录读取头文件(因为我们自己也可以写头文件,本文暂时不介绍),并不是从特定的目录读取。

结语

读完本文,大家应该对一个基本的Hello World有了一定的概念了吧,下一篇文章我们将继续探究什么是变量:《C语言快速入门 - 变量》。

你可能感兴趣的:(C语言快速入门 - Hello World 详解)