C程序结构

本文从C程序源文件讲起,探讨了源文件的内部构成,然后对C程序的结构做了进一步讨论,最后通过一个C程序实例,让读者对C程序结构有一个感性认识。

源文件

编写C程序,实际是编写C程序源代码,开发者需要把写好的源代码保存到一个文件中,这样源代码就不会丢失,并且可以被重新编辑和修改,并能被编译器读取,这种用于保存源代码的文件被称为源文件。源文件是一个文本文件,扩展名是“.c”,可以使用任何可编辑文本的编辑器编辑源文件。
一个C程序至少要包含一个源文件,复杂一些的C程序可能需要包含多个源文件。打开文本编辑器,编辑下面的C源文件:
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}

上面的源文件构成了最简单的C程序,它只有一个源文件,该源文件包含预处理命令和main()函数定义,在C程序中只能定义一个main()函数,该函数为C程序的执行入口,包含main()函数的源文件为C程序的主源文件。

上面源文件的第1行为预处理指令,预处理命令以“#”开始,编译器在开始工作之前,会先执行预处理指令,将预处理的结果和源代码合并到一起再进行编译处理。“include”是C语言提供的包含文件的预处理指令,指令后面为要包含的文件名称,“stdio.h”文件在C语言中被称为头文件,该文件的扩展名为“.h”,它定义了开发者可以使用的输入输出函数。若头文件使用一对英文尖括号将文件名称括起来,编译器会在系统路径下查找要包含的文件;若使用一对英文双引号将文件名称括起来,编译器会在当前项目目录下查找要包含的文件。
源文件第2行是main()函数的函数头,“main”是函数的名称,main()函数是C程序执行的起点,它可以返回一个值,也可以不返回值。“int”是C语言的关键字,它表示一个整数类型,main()会返回一个整数。若不需要main函数返回一个整数,可以使用“void”关键字替换“int”关键字,main()函数不会返回任何值。
源文件的第3、4行语句构成main()函数的函数体,函数体是函数要执行的内容,函数体由一对大括号封闭起来,内部是要执行的代码语句,函数体内可以包含多行代码语句。函数体内的每条语句用“;”结尾。“printf("Hello World\n");”语句是main()函数体内要执行的语句,该条语句在屏幕上产生一行输出“Hello World”,printf()是C语言提供的输出函数,可以简单理解为向屏幕输出文字或符号。括号中的内容称为函数的参数,在括号内可以看到输出的内容“Hello World”。
语句“return 0”是返回语句,该语句使main()函数终止运行,并向操作系统返回一个整数0。

C程序构成

完整C程序构成如图1-4所示。
C程序构成

C程序构成

一个完整的C程序包含一个或若干源文件和函数库。函数库是具有一定功能的函数集合,库中存放函数的名称和对应的目标代码,以及连接过程中所需的重定位信息,函数库一般会为开发者提供扩展名为“.h”的头文件,该头文件包含了函数库内的函数原型,开发者若要调用函数库内的函数,需要在源文件内使用“include”指令将该函数库对应的头文件包含进来。

C程序实例

【例1-1】编写面积计算器程序

编程思路:面积计算器程序可以分解为计算长方形的面积、计算正方形的面积、计算平行四边形的面积、计算三角形的面积四个子功能,每个子功能用一个源文件实现。面积计算器程序结构见图1-5。
面积计算器程序结构

面积计算器程序结构

按照功能划分,面积计算器程序共有五个源文件,主源文件为main.c,计算长方形面积的源文件为rectangle.c,计算正方形面积的源文件为square.c,计算平行四边形面积的源文件为paraller.c,计算三角形面积的源文件为triangle.c。
面积计算器程序功能划分

面积计算器程序功能划分

源文件1:计算长方形面积—rectangle.c

程序清单。
/*****************************************
作者:
创建日期:
功能描述:计算长方形的面积
*/
double rectangle(double width,double height)
{
return width*height;
}
rectangle.c定义了计算长方形面积的函数rectangle(),该函数有两个形参,调用时需要传入两个实参。/*……*/内容为注释。后面计算面积的源文件均省略了注释。

源文件2:计算正方形面积—square.c

程序清单。
double square(double side)
{
return side*side;
}

源文件3:计算三角形面积—triangle.c

程序清单。
double triangle(double base,double height)
{
return (base*height)/2;
}

源文件4:计算平行四边形面积—paraller.c

程序清单。
double paraller(double base,double height)
{
return base*height;
}

主源文件—main.c

程序清单。
//引入C语言标准输入输出函数库
/stdio.h是标准输入输出函数库的头文件
#include<stdio.h>
//引入自定义函数
include "area.h"


// 全局变量
int g_op = 1;
// 程序入口函数
void main()
{
// 声明局部变量op
printf("-------欢迎使用面积计算器------\n");
printf("按下数字 1 键:计算长方形面积\n");
printf("按下数字 2 键:计算正方形面积\n");
printf("按下数字 3 键:计算平行四边形面积\n");
printf("按下数字 4 键:计算三角形面积\n");
scanf("%d",&g_op);
if( g_op == 1 )
{
printf("长方形面积为:%.2f",rectangle(20,30));
}
else if( g_op == 2 )
{
printf("正方形面积为:%.2f",square(20));
}
else if( g_op == 3 )
{
printf("平行四边形面积为:%.2f",paraller(15,9));
}
else
{
printf("三角形面积为:%.2f",triangle(15,9));
}


}

main.c源文件为主源文件,该源文件通过“include”预处理指令分别引入了C语言标准输入输出函数库和自定义计算面积的函数,“area.h”头文件描述了面积计算函数的原型。

area.h头文件清单。

/*****************************************
文件名:area.h
描述:面积计算函数原型头文件
*/


// 计算平行四边形面积的函数
double paraller(double base,double height);
// 计算三角形面积的函数
double triangle(double base,double height);
// 计算长方形面积的函数
double rectangle(double width,double height);
// 计算正方形方形面积的函数
double square(double side);
main.c源文件定义了全局变量g_op,用于存储用户输入的数字。main()函数是程序入口函数,程序将从main()函数开始执行。printf()函数是C语言提供的标准输出函数,<stdio.h>描述了该函数的原型。