zoukankan      html  css  js  c++  java
  • 多文件协作,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);
    }
  • 相关阅读:
    zend framework多模块配置
    java解析xml的几种方式
    jdbc操作步骤和preparedStatment相比Statment的好处
    Android UI 之实现多级列表TreeView
    python小游戏实现代码
    【iOS知识学习】_UITableView简介
    根据指定电话号码得到通讯录上的姓名
    HDU 4705 Y
    C#实现的内存分页机制的一个实例
    【编程程序猿艺术】学习记录1:指针向左翻转法的旋转串
  • 原文地址:https://www.cnblogs.com/xixixing/p/10102980.html
Copyright © 2011-2022 走看看