多个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 = 0;//全局变量 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 0; }
//外部变量,先声明,再使用 //此两行可以放到头文件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(2 * 3.14*r); }
源程序文件中的函数、全局变量,默认都可被其他文件访问(需声明)。
若只供文件内使用,可定义成静态static,即静态函数、静态全局变量。(其他文件,即便声明,也无法使用)
静态变量,存储在静态存储区,立即分配内存,调用后存储最新的值,全部程序执行结束,才被释放。
非静态变量,存储在动态存储区(栈),被调用时分配内存,调用结束立即释放,不存储最新值。
非静态变量,不断重复“分配内存/释放”操作,每次重新开始。
#include<iostream> using namespace std; void fun() { int x = 0;//每次调用执行“分配内存/释放”操作,不存储最新值,每次重新开始 static int y = 0;//存储最新值,全部程序结束才释放 x++; y++; cout << x << " " << y << endl; } int main() { fun();//1 1 fun();//1 2 return 0; }
若声明过多,可以使用头文件,避免繁琐。
//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 = 0;//全局变量 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 0; }
#include "main.h"//引入头文件,使得本文件可访问规定的变量 void RectArea() {//函数,长方形面积 double area = length*width; totalArea += area; }
double CircleArea(double r) {//函数,圆面积 return(2 * 3.14*r); }