1.2 认识main()函数
本小节首先介绍每个C程序开始的内容,也就是main()函数。首先,我想要用打比方的方式说明什么是函数。从编程的角度来讲,函数使你能够将逻辑上的一系列的动作(或程序语句)组织到一个名字之下。例如,假设你想要创建一个名为bakeCake的函数。
烘焙蛋糕的算法(过程)如下所示:
在用于搅拌的碗中,搅拌湿的成分(水、奶油、蛋汁等);
加入干的成分(面粉等);
将面糊铺满烤盘;
在烤箱中,用350度的温度烘焙30分钟。
注意,给你的函数起一个富有描述性的名称,将有助于任何人读懂你的代码,即便你自己在以后某个日子里忘记了,也可以很容易读懂代码,从而明白这个函数要完成什么任务。
函数通常不是静态的,这意味着,它们是有生命的、会呼吸的实体,还是打个比方吧——它们会接受一些信息并返回一些信息。因此,bakeCake函数会接受要烘焙的成分的一个列表(称为参数),并且返回一个完成的蛋糕(称为值)。
main()函数和任何其他的函数一样,因为它也将动作组织到一起,并且能够接受参数(信息)并返回值(也是信息)。与其他函数的不同之处在于,main()函数是向操作系统返回值,而你在本书中所使用和创建的函数,向main()函数中的调用C语句返回值。
在本书中,我使用的main()函数不会从操作系统接受参数,并且只返回一个为0的值。
算法
算法(algorithm)是用于解决问题的一个按部就班的过程或者一组规则。算法可以像是烘焙一个蛋糕一样简单,也可以像一架巨大的波音747的自动驾驶系统的实现过程那样复杂。
算法通常从一个问题的描述开始(例如,蛋糕听起来不错。但是,我该怎么制作和烘焙蛋糕呢)?作为一名程序员,在编写任何代码之前,要看看这个问题并且将它分解为各个步骤来加以解决。一旦有了一个步骤列表作为指南,就可以开始真正的编码工作了。
技巧
尽管当一个程序执行完毕而没有错误的时候,它会自动地向调用程序返回一个为0的值,但很多程序员认为,让main()函数显式地返回一个为0的值来表明程序成功地执行了,这是一种好的做法。本书中的示例遵从这一做法,当你开始编写更为高级的程序,让main()函数返0以外的值以表明各种错误的条件,此时,这种做法变得很有用。
int main()
{
return 0;
}
正如前面的例子所示,main()函数以关键字int和main开头,后面跟着一个空的括号()。这告诉计算机,该函数名为“main”并且它向操作系统返回一个整数值(int)。如果给一个函数传递了一个值,这个值就叫做参数(argument或parameter),括号内的内容表明了函数所接受的参数的类型。正如前面所提到的,本书所编写的main()函数都不使用函数参数,因此,这里的圆括号是空的。
陷阱
C语言是区分大小写的编程语言。例如,函数名main()、Main()和MAIN()是不同的名称。此外,如果不区分大小写的话,将会占用额外的计算机资源,因为像键盘这样的输入设备本身是区分大小写的。
圆括号的后面,跟着一对花括号。第一个花括号表示一个逻辑编程语句块的开始,最后的一个花括号表示逻辑编程语句块的结束。每个函数实现,都要求使用一个开始花括号({)和一个结束花括号()}。
如下的程序的代码,展示了一个有些简单但是很完整的C程序。通过这里的代码,我们可以了解到单个的程序语句是如何组合到一起,以构成一个完整的C程序的。传统的编程图书会把第一个程序命名为“Hello, World”,但是,我打算打破这个惯例——将这个程序命名为“C You Later, World”。
/ C Programming for the Absolute Beginner /
#include <stdio.h>
int main()
{
printf("\nC you later\n");
return 0;
}
当编译并运行前面的程序的时候,它会在计算机屏幕上显示文本“C you later”,如图1.2所示。
图1.2 一个简单的C程序的输出
看一下图1.3中的示例程序代码,你将会看到一个小小的C程序是由很多个部分组成的。
图1.3 一个简单的C程序的组成部分
本章剩下的部分将会介绍这些组成部分,以及使用每个部分来组成一个简单的C程序的方法。