多文件协作,extern、static、头文件

多个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);
}

 

posted @ 2018-12-11 16:24  夕西行  阅读(436)  评论(0编辑  收藏  举报