• 多文件协作,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);
    }
  • 相关阅读:
    Call指令和Ret指令讲解02 零基础入门学习汇编语言49
    指针01 零基础入门学习C语言41
    Call指令和Ret指令讲解03 零基础入门学习汇编语言50
    Call指令和Ret指令讲解01 零基础入门学习汇编语言48
    指针01 零基础入门学习C语言41
    指针02 零基础入门学习C语言42
    Call指令和Ret指令讲解02 零基础入门学习汇编语言49
    VC++2012编程演练数据结构《31》狄杰斯特拉算法
    VC++2012编程演练数据结构《30》弗洛伊德算法
    在Windows Azure Web Site上为Node.js自动安装NPM包
  • 原文地址:https://www.cnblogs.com/xixixing/p/10102980.html
Copyright © 2020-2023  润新知