多个cpp文件协同工作。使用外部函数、变量时,必须先声明再使用。
声明外部函数(一般在main.cpp中),extern可省略(主函数中默认可访问外部函数)
extern void RectArea();
声明外部全局变量(一般在非main.cpp中),extern不可省略,不能初始化。
extern double length, width;
extern double totalArea;
#include<iostream>
using namespace std;
//使用外部函数,需先声明再使用
//此两行代码,可以放到头文件area.h中,在本文件添加#include "area.h"
void RectArea();//声明函数,供main调用
double CircleArea(double r); double length, width;//全局变量,可被其他文件识别
double totalArea = ;//全局变量 int main() {//主函数,被调函数定义在主调函数之前,声明省略
double r1, r2; cout << "请输入长方形的长、宽(m)" << endl;
cin >> length >> width;
cout << "请输入清水池和污水池的半径(m)" << endl;
cin >> r1 >> r2; RectArea();
totalArea += CircleArea(r1);
totalArea += CircleArea(r2); cout << "工程总面积为" << totalArea << "平方米" << endl;
return ;
}
//外部变量,先声明,再使用
//此两行可以放到头文件main.h中,在本文件中添加 #include "main.h"
extern double length, width;//声明外部全局变量,存储main函数中的值
extern double totalArea;
void RectArea() {//函数,长方形面积
double area = length*width;
totalArea += area;
}
double CircleArea(double r) {//函数,圆面积
return( * 3.14*r);
}
源程序文件中的函数、全局变量,默认都可被其他文件访问(需声明)。
若只供文件内使用,可定义成静态static,即静态函数、静态全局变量。(其他文件,即便声明,也无法使用)
静态变量,存储在静态存储区,立即分配内存,调用后存储最新的值,全部程序执行结束,才被释放。
非静态变量,存储在动态存储区(栈),被调用时分配内存,调用结束立即释放,不存储最新值。
非静态变量,不断重复“分配内存/释放”操作,每次重新开始。
#include<iostream>
using namespace std; void fun() {
int x = ;//每次调用执行“分配内存/释放”操作,不存储最新值,每次重新开始
static int y = ;//存储最新值,全部程序结束才释放
x++; y++;
cout << x << " " << y << endl;
}
int main() {
fun();//1 1
fun();//1 2
return ;
}
若声明过多,可以使用头文件,避免繁琐。
//main.h
extern double length, width;//声明外部全局变量,存储main函数中的值
extern double totalArea;
//area.h
void RectArea();//声明函数,供main调用
double CircleArea(double r);
#include<iostream>
#include "area.h"//引入头文件,使得本文件可访问规定的函数文件
using namespace std; double length, width;//全局变量,可被其他文件识别
double totalArea = ;//全局变量 int main() {//主函数,被调函数定义在主调函数之前,声明省略
double r1, r2; cout << "请输入长方形的长、宽(m)" << endl;
cin >> length >> width;
cout << "请输入清水池和污水池的半径(m)" << endl;
cin >> r1 >> r2; RectArea();
totalArea += CircleArea(r1);
totalArea += CircleArea(r2); cout << "工程总面积为" << totalArea << "平方米" << endl;
return ;
}
#include "main.h"//引入头文件,使得本文件可访问规定的变量
void RectArea() {//函数,长方形面积
double area = length*width;
totalArea += area;
}
double CircleArea(double r) {//函数,圆面积
return( * 3.14*r);
}