1.1土到爆的HelloWorld

本文详细解析了C语言中经典的HelloWorld程序,从创建主函数到使用printf()函数输出文本,再到程序返回值的设置,逐步引导读者理解每个步骤的意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说来也就怪了,我见过的所有介绍程序语言的书,第一章一定是介绍HelloWorld。我还记得我第一次听到这个词的时候,简直是一脸的懵逼……感觉这哥们儿萌萌的,傻傻的。后来我才明白,用这个来起头是有一定道理的,即使我们打破这个惯例,貌似也不会取得什么更好的效果,所以既然如此,那我们还是一起来研究一下这个土到爆的HelloWorld吧。

先来看一下HelloWorld的代码,注意,这段代码虽然短,但是一个非常完整的程序,如果你不懂的话完全木有关系(我第一看到的时候心里有一百万只蟑螂爬过,特别想吐槽一句:“艾玛,这都神马东东?”),很快你就会看明白了。

#include <stdio.h>

int main(int argc, const char *argv[]) {
    printf("Hello, World!\n");
    return 0;
}

把上面这堆乱七八糟的东西敲到你的编译器里,然后运行,不出意外的话,你可以在控制台看到一行输出:

Hello, World!

也可能在下面或者上面会有其他乱七八糟的输出,这都是正常的。

这个程序的作用就是在控制台上输出一行字,字的内容是“Hello, World!”。我们看到效果已经实现了。

接下来把刚才敲进去的全部内容再删掉(有没有搞错?好吧,你要理解我是个逗比,怎么可能是正常人的思维呢?愚蠢的地球人啊~~),我们来重新模拟一遍敲这段代码的过程(这段程序其实并不是按顺序敲出来的,除非等你有经验了,能预测后来发生的事情,那你可能会顺着敲出来)。

任何C程序都需要有一个切入点,因为,计算机必须知道你这个程序从哪里开始执行,从哪里结束(什么?难道不是从上往下依次执行吗?好吧,还真不是,现在不理解没关系,慢慢来)。那么,究竟怎么来表示程序的起始点和结束点呢?我们需要给程序定义一个主函数(主函数?函数是神马?能吃吗?好吃吗?),如果你是第一次接触C语言的话,我还真的不太好给你一下子说清楚什么是函数,不过我们不需要着急,先照着写,到后面的章节我会详细介绍函数的。主函数的名称是固定的,就是main,如果你英语好的话你应该能认识,这是个形容词,意思是“主要的,首要的”。那怎么写一个函数呢?这样写:

main()

注意,函数名后边必须紧跟一个括号,不管括号里有没有东西,括号都不能省略,这样才表示一个函数,以后我会介绍,这个括号其实叫做参数列表。可是光有函数名还不行,我们还得给这个函数添加内容,那么怎么添加内容呢?在函数名和括号的后面加一对大括号,大括号中的内容表示隶属于这个函数,我们把这一部分叫做函数体。(注意,代码中所有的符号都要是英文半角符号,也有很多程序员管大括号{},中括号[]和小括号()分别称作“花括号”,“方括号”和“圆括号”)

main() {

}

C语言对绝大多数的空格和换行是不敏感的(注意不是所有的,特殊情况以后会介绍),因此,你可以相对随意的布局。换句话说,下面的这几种写法是等价的。

main() {}

main() {

}

main()
{

}

在这里不得不说一个行内“圣战”,就是关于这个左大括号应该和上一行代码写在同一行还是应该换行书写的问题。这个问题已经争论的十几年了,不过我个人认为没事干吵吵玩的成分更大的一些,到底用那种写法还看个人习惯。我个人坚持上面的第二种写法,也就是在代码后面跟一个空格,然后再跟左大括号的这种写法,愿意主要是因为,第一,这样代码相对紧凑,容易阅读,第二,有一些句末不需要分号的语言中,左大括号换行会产生歧义,也是有一些奇怪bug的来源。因此我以后的教程中均采用这种风格来书写,而至于大家,选一种你喜欢的就好(别太逗比了,比如有些人右大括号不换行,感觉实在有点不能忍→_→)

接下来,我们回到正题(逗比讲课总喜欢跑题,大家谅解一下(*^__^*) )。主函数写出来以后,我们接下来的任务就是要让“Hello, World!”这句话显示在控制台中了。那么怎么才能把它输出到控制台上呢?我们需要调用另外的一个函数printf()。

main() {
    printf("Hello, World!");
}

这里注意一下,在写printf()函数之前,我们给了一个缩进(一个Tab键,或者四个空格…………好吧其实这个是业内另一个“圣战”,不罗嗦了→_→),这样写好代码缩进可以增强代码的可读性,希望大家都能养成这样的好习惯。

printf这好像不是一个英语单词(当然不是了,牛津词典里都查不到→_→),这其实是两个单词,第一个是print,也就是打印的意思,第二个是format,也就是格式的意思,我们的printf()函数就叫做“格式化输出函数”,现在你先认识就好,以后会详细介绍。

C语言要求每一句完整的语句末尾要加一个分号(英文半角的),一定一定要加!句末忘记分号这是一个世界性的问题。

我们可以看到这个函数的参数列表中不再是空,而是传入了一个用双引号(再强调一下是英文半角的双引号,换句话说前引号和后引号长得一样的那个)包括的一串文字,这个叫做字符串,在这里的意思,自然就是“Hello, World”这个字符串,通过这个函数,我们就可以在控制台上输出字符串中的内容。

可是,printf()函数到底是怎么把你传进去的东西打印在屏幕上的呢?好吧,其实这个我也不知道(逗~~~~),不过我不需要知道,因为有人已经替我们把这个工作做好了,当然,你得先找到这个做好的东西,然后要告诉编译器,编译器才会按照相应的方法实现相应的功能,不然,编译器凭什么知道这个printf()函数是到底要干什么呢?好,那么我们接下来的任务就是帮助编译器找到这个printf()函数究竟如何实现的那个文件,方法就是在程序的最上面加上一行代码,现在代码变成了这样:

#include <stdio.h>
main() {
    printf("Hello, World!");
}
(哎?分号呢?我说逗比你是不是忘了?)这种以井号“#”开头的代码叫做预处理代码,句末是不需要添加分号的。include表示引入头文件,后面尖括号中的内容就叫做头文件(好啦我知道一下给出的概念太多了,没事啦,后面都会分别详细介绍的,先记下哈!)printf()函数究竟如何实现的,就写在stdio.h这个头文件中,把它引入过来编译器就知道遇到printf()函数的时候怎么做了。stdio同样也不是个单词,它代表的是"stdandard input output",翻译过来就是“标准输入输出”。所以记住,如果要调用非当前文件下定义的函数,就需要引入特定的头文件。系统定义的头文件说多也不多,说少也不少,我们慢慢见,慢慢记。

好啦,现在你可以试一下程序能不能运行(什么?真逗……这分明和一开始给出的代码不一样的好吗?安啦~试试嘛又不会怎样~),有些编译器可能会运行成功,并且看到了"Hello, World!"的输出,还有些编译器可能会报错。其实程序写到现在还是有很大问题的,什么问题呢?程序停止有很多种情况,有可能是程序执行完毕,正常退出;有可能是内存满了,被系统强制退出;也有可能是被用户停掉。计算机凭什么知道你这个程序有没有正常退出呢?现在的状态到底程序执行完了没有呢?这就需要我们做一个标记,如果系统得到了这个标记,那就说明正常退出,否则,那就是异常。系统规定,如果程序正常退出,程序应该返回给系统一个值,这个值被规定为0。因此,我们需要在主函数结束前补一句返回指令。

#include <stdio.h>
main() {
    printf("Hello, World!");
    return 0;
}

这就表示,如果程序成功执行到这里,就会给系统返回一个0,但是现在这种写法是不符合语法的,你应该可以看到编译器报错了。为什么呢?返回的这个值是0,它是一个整型数据(啥又是整型啊?无力吐槽~~安啦,一样,会介绍的!)。我们需要在定义函数的函数名之前,写上该函数的返回值类型。那么针对于这里,就应该写上表示整型的代码,那就是int

#include <stdio.h>
int main() {
    printf("Hello, World!");
    return 0;
}

这下好了,报错没了,刚才没能成功运行的,现在可以试试,应该没问题了。不过说没问题了其实还有,你可能会发现这行输出会和后面的内容连起来。怎么办呢?我们能在字符串里面加一个换行吗?直接敲回车肯定不行,因为我说过C语言对大部分的换行是不敏感的,这里要用到一种特殊的字符——转义字符(又来了…………),我们用"\n"来表示换行。
#include <stdio.h>
int main() {
    printf("Hello, World!\n");
    return 0;
}

这下真的没问题了。细心的童鞋可能会发现,现在和我一开始给的那段代码还是不太一样,不一样的地方在主函数的参数列表中,那两个参数是什么含义呢?简单的来说,return语句用于向系统返回一个值,那么系统如何向程序传入值呢?就用到了那两个参数,你先记住写法,关于这两个参数具体的用法我以后会专门介绍。

#include <stdio.h>

int main(int argc, const char *argv[]) {
    printf("Hello, World!\n");
    return 0;
}
好啦,最简单的C语言程序讲完了(累死宝宝了),由于是第一节,我提到了很多概念,可能会让你各种不懂,这些都没关系,你先知道有这么一回事就行,很快你就可以完全明白它们,现在,你也可以去弄个空白文件,敲个小程序,随便输出点乱七八糟的东西(你懂得~)去给别人装个X了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

borehole打洞哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值