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

目录

开始

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

程序

#include <stdio.h>

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就显得十分美观了。
运行结果
以后的学习中我们还可能遇到别的转义字符,具体的格式就是以\开头,后面跟一个别的字字符,详见蓝字里的百度百科。

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

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

函数

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

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

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

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

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

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

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

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

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


然后我们来看下第一行#include <stdio.h>

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

include

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

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

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

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

头文件

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

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

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

然后我们在编译的时候就会爆出这么一串\color{#FF00FF}{warning}警告。

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 ‘<stdio.h>’ or provide a declaration of ‘printf’

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

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

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

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

这就是头文件的作用。


那么,我们再回到那句#include <stdio.h>吧。

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

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

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

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

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

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

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

结语

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352