从零开始:C语言快速入门教程
上QQ阅读APP看书,第一时间看更新

1.4 C语言程序代码快速解析

相信即使是完全不懂C语言的读者,也能大概看出【上机实习范例:CH01_01.c】的含义。该程序代码中的printf()函数算是程序领域中的“明星”函数了,几乎每种语言都把它用作输出函数,这个程序的结果就是输出双引号内的字符串。其实不论哪种程序语言都是对这些关键字(如printf)进行排列组合,来构成一个大程序,C语言也不例外。

任何一个C语言程序的外观都和【上机实习范例:CH01_01.c】大同小异,只是程序代码多少的区别。在还没深入C语言的语法世界时,我们将以这个上机实习范例为基础来谈谈C语言程序,先从整体、宏观的角度来看C语言,这会对日后提升C语言程序的设计能力有意想不到的效果。

■【上机实习范例:CH01_01.c】

01 #include <stdio.h>
02 #include <stdlib.h>
03
04 int main(void)
05 {
06
07 printf("我的第一个C语言程序!"); /*调用printf()函数 */
08
09 return 0;
10 }

1.4.1 最重要的main()函数

C语言是一种符合模块化设计精神的语言,简单来说,C语言程序本身就是由各种函数所组成的。所谓函数,就是执行特定功能的语句集合。我们可以自行建立函数,也可以直接使用C语言提供的标准函数,例如main()函数或printf()函数。

通常函数主体用一对大括号“{}”来定义,在函数主体的程序区段中,可以包含多行语句,而每一行语句都要以“;”结尾。请注意,程序区段的结束是以右大括号“}”来告知编译器的,且“}”符号之后无须再加上“;”来作为结尾。以main()函数来说,一个最简单的C语言程序可以定义如下。

int main(){
{
   ←完全没有任何的语句
}

对C语言程序而言,main()函数大有来头,它代表着任何C语言程序的进入点,并且必须使用main这个关键字来作为函数名称。任何一个C语言程序在开始执行时,不论这个程序有多大规模,操作系统都会先从main()函数开始执行,而不论它处在程序中的哪个位置。可以把程序想象成一团毛线球,main()函数就是那个线头。

函数前的类型声明表示的是函数执行完后返回值的类型,例如int main()就表示返回值为整数类型。如果不需要函数返回值,则可以设定其数据类型为“void”。不过括号中如果使用了void,就代表这个函数中并没有传递任何自变量,也可以直接用空白括号表示,例如可以声明成以下两种方式。

void main(void)
void main()

【上机实习范例:CH01_01.c】第9行return语句的用途主要是,如果函数具有返回值,则必须在函数定义中使用return语句来回传对应函数的整数值;如果回传值为0,则表示停止执行程序并且将控制权还给操作系统;如果声明为void,就必须省略return这行语句。

1.4.2 头文件的功能

C语言程序本身是一种函数的组合,其最大的优点就是还内建了许多标准函数供程序设计者使用,这些函数被分门别类地放置于扩展名为“.h”的不同头文件中。通过“#include”指令,设计者就可以将相关的头文件“包含”(include)进你的程序并使用。

【上机实习范例:CH01_01.c】第1行中的#include <stdio.h>就是把存储在C语言中的标准输出、输入函数的stdio.h文件包含进来,例如printf()函数就定义在stdio.h文件中。常见的C语言内建头文件如表1.3所示。

表1.3

0

在C语言中,“#include”指令是一种称为预处理的指令,并不算是C语言的正式语句,所以不需要在该语句的最后加上分号“;”。

当使用C语言所提供的内建头文件时,必须用“<>”将其括住。也可以使用自定义的头文件,但是就要用“""”符号将其引起来。例如在A文件中要引用B文件时,在A文件开头处加入自定义的头文件#include"B.c"即可。以下是两种正确的语法格式。

格式1:#include <内建头文件名称>
格式2:#include "自定义头文件名称"

Tips

大家可能会好奇,这两种载入方式有什么不同?事实上,两者之间的差异就在于头文件的搜索路径有所不同。如果采用格式1的载入方式,编译器就会去寻找系统预设的函数库目录;而格式2则会先在目前的工作目录下寻找,找不到才会去寻找系统预设的函数库目录。

1.4.3 写注释是种好习惯

有许多读者总认为写的程序只要能跑出结果就好了,不需要拖泥带水地写注释。其实随着程序代码的规模日益庞大,现在程序设计的重点就在于可读性与可维护性,而适时使用注释就是达到这两项重点的最主要方法。

注释不仅可以帮助其他的程序设计者阅读程序内容,而且在日后维护程序时,清楚的注释也能省下不少维护成本。C语言程序的注释以“/*”作为开头、以“*/”作为结束,并且可以出现在程序的任何位置。在C语言中,“/*”与“*/”间的文字都属于注释内容,不会进行编译,如下所示。另外,注释也能够跨行使用。

/ *
 这是我的第一个C语言程序←中间的内容编译器全部不予理会
  它会显示一小段简单的文字
*/

此外,C语言语句的编写具有自由化格式精神,语句所包含的内容相当广泛,例如声明、变量、表达式、函数调用、流程控制、循环等。也就是说,只要不违背基本语法规则,可以自由安排程序代码的位置。除了加上注释外,写程序跟写作文一样,我们都希望能段落分明,适当的缩进可以达到这样的效果。

程序由一个或数个程序区块所构成,而程序区块就像文章中的段落。所谓程序区块,就是由一对大括号括住的部分,其中包含了多行或单行的语句。缩进的主要功能是区分程序区块的层级,使得程序代码易于阅读。例如,如果主程序中包含子区块,或者子区块中又包含其他子区块时,就可以通过缩进来区分程序代码的层级。简单来说,遇到大括号就要考虑缩进。