本章内容来自 书 《C primer plus》第六版的第 262 - 266 页内容,如果可以,大家可以直接看书
使用多个函数的最简单方法就是将它们放在同一文件中,然后像编译单个函数的文件一样对该文件进行编译。
1.UNIX
首先假定UNIX系统下安装了标准的编译器cc。文件file1.c和文件file2.c中包含有c函数,命令如下:
cc file1.c file2.c
另外还将生产两个目标文件file1.o和file2.o。如果随后只更改了文件file1.c而file2.c没有改变,可以使用命令编译第一个文件并将其链接到第二个文件的目标代码:
cc file1.c file2.o
2.LIUNX
同UNIX一样,如果装有编译器gcc,则命令为
gcc file1.c file2.c
3.DOS命令行编译器
大多数DOS命令行编译器和UNIX相同,不同在于DOS生产的目标文件扩展名为.obj而不是.o。而且有些编译器并不生产目标代码文件,而是生产汇编语言或者其他特殊的代码文件。
4.windows和macintosh编译器
windows和macintosh系统下的编译器是面向工程的。工程描述了一个特定的程序所使用的资源。这些资源中包括源代码文件。编译器编译文件是对工程的编译。
头文件的使用:
我们可以自己定义头文件,用来声明函数原型,声明预处理常量,这样我们就可以在任何的文件使用头文件从而达到使用预处理常量和函数原型的作用,避免重复使用它们而引发的错误,这样也有利于修改。总之,把函数原型和常量定义放在一个头文件中是一个很好的编程习惯。
例如我们要编写这样一个程序:假定需要管理4个连锁的旅馆。每一个旅馆都有不同的收费标准,但是对于一个特定的旅馆,其中的所有房间都符合同一种收费标准。对于预定住宿时间超过一天的人来说,第二天的收费是第一天的95%,而第三天的收费是第二天的95%,等等。我们需要这样一个程序,即对于指定的旅馆和总的住宿天数可以计算出收费总额。同时程序需要实现一个菜单,从而允许用户反复进行数据输入直到选择退出。
第一个程序
#include <stdio.h>
#include "hotel.h"
int main(void)
{
int nights;
double hotel_rate;
int code;
while ((code = menu()) != QUIT)
{
switch(code)
{
case 1 : hotel_rate = HOTEL1;
break;
case 2 : hotel_rate = HOTEL2;
break;
case 3 : hotel_rate = HOTEL3;
break;
case 4 : hotel_rate = HOTEL4;
break;
default: hotel_rate = 0.0;
printf("Oops!\n");
break;
}
nights = getnights();
showprice(hotel_rate, nights);
}
printf("Thank you and goodbye.");
return 0;
}
第二个程序
#include <stdio.h>
#include "hotel.h"
int menu(void)
{
int code, status;
printf("\n%s%s\n", STARS, STARS);
printf("Enter the number of the desired hotel:\n");
printf("1) Fairfield Arms 2) Hotel Olympic\n");
printf("3) Chertworthy Plaza 4) The Stockton\n");
printf("5) quit\n");
printf("%s%s\n", STARS, STARS);
while ((status = scanf("%d", &code)) != 1 ||
(code < 1 || code > 5))
{
if (status != 1)
scanf("%*s");
printf("Enter an integer from 1 to 5, please.\n");
}
return code;
}
int getnights(void)
{
int nights;
printf("How many nights are needed? ");
while (scanf("%d", &nights) != 1)
{
scanf("%*s");
printf("Please enter an integer, such as 2.\n");
}
return nights;
}
void showprice(double rate, int nights)
{
int n;
double total = 0.0;
double factor = 1.0;
for (n = 1; n <= nights; n++, factor *= DISCOUNT)
total += rate * factor;
printf("The total cost will be $%0.2f.\n", total);
}
头文件
#define QUIT 5
#define HOTEL1 80.00
#define HOTEL2 125.00
#define HOTEL3 155.00
#define HOTEL4 200.00
#define DISCOUNT 0.95
#define STARS "**********************************"
// shows list of choices
int menu(void);
// returns number of nights desired
int getnights(void);
// calculates price from rate, nights
// and displays result
void showprice(double rate, int nights);