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

多文件协作,extern、static、头文件的更多相关文章

  1. extern与头文件(*.h)的区别和联系

    原文网址为:http://lpy999.blog.163.com/blog/static/117372061201182051413310/ 个人认为有一些道理:所以转过来学习了. 用#include ...

  2. [转]extern与头文件(*.h)的区别和联系

    用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx. ...

  3. .c和.h文件的区别(头文件与之实现文件的的关系~ )

     .c和.h文件的区别 一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢 ...

  4. 利用 Symbol Type Viewer 工具实现将 pdb 文件 转换为 c\c++ 头文件

    利用 Symbol Type Viewer 工具实现将 pdb 文件 转换为 c\c++ 头文件 一.得到符号 二.将符号转换为 .h 文件 三.得到 c\c++ 头文件,之后编程时直接导入这个文件即 ...

  5. linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)

    原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是 ...

  6. C++ 多文件编译简述:头文件、链接性、声明与定义

    目录 Commen Sense 头文件 链接性 static 与链接性控制 extern 与外部链接性 Reference Commen Sense C++ 在编译时对每个翻译单元(Translati ...

  7. 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件

    主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...

  8. C/C++不同文件夹下包含头文件的方法及#include的使用

    转自:http://blog.sina.com.cn/s/blog_6e0693f70100so42.html 本文主要介绍了如何不同文件夹下使用预处理器指示符#include. 假设我们有如下一个工 ...

  9. 文件类型分类:头文件dirent.h中定义的文件类型与linux内文件符号对应关系

    头文件 dirent.h 定义了文件类型: enum{    DT_UNKNOWN = 0,         //未知类型    DT_FIFO = 1,            //first in, ...

  10. 删除moduleCache下文件解决预编译头文件相关的编译错误

    之前有在代码全部正确的情况下,遇到过下面的编译错误: fatal error: file '.....h' has been modified since the precompiled header ...

随机推荐

  1. 微信小程序flex佈局

    聲明:display:flex 換行flex-wrap:flex-wrap:nowrap(不換行).wrap(換行).wrap-reserve(第一行在下面): 主軸對齊(橫向對齊)justify-c ...

  2. JS 原型和闭包

    原文:深入理解javascript原型和闭包(完结) JavaScript 中的难点和重要点,排除知识体系之外的 bug.本篇是学习笔记,记录个人理解. 一.一切皆对象:一切(引用类型)都是对象,对象 ...

  3. JdbcTemplate的运用 (也是数据源的一种)

  4. Python中第三方模块requests解析

    一.简述 Requests HTTP Library 二.模块框架 ''' __version__ _internal_utils adapters api auth certs compat coo ...

  5. Hdoj 2188.悼念512汶川大地震遇难同胞——选拔志愿者 题解

    Problem Description 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理 ...

  6. html标题、段落、换行与字符实体

    通过 <h1>.<h2>.<h3>.<h4>.<h5>.<h6>,标签可以在网页上定义6种级别的标题.6种级别的标题表示文档的6 ...

  7. 540. Single Element in a Sorted Array

    题目大意: 给你一个由小到大排好序的数组,里面只有一个数出现了一次,其他数都出现了两次,要求找出那个只出现一次的数,而且时间复杂度为O(logn) 题目思路: 说实话一开始没想到,因为几乎每个数都出现 ...

  8. Codeforces 1079D Barcelonian Distance(计算几何)

    题目链接:Barcelonian Distance 题意:给定方格坐标,方格坐标上有两个点A,B和一条直线.规定:直线上沿直线走,否则沿方格走.求A到B的最短距离. 题解:通过直线到达的:A.B两点都 ...

  9. Hyper-V

    docker与vm同时安装,会导致虚拟机无法启动及网络不通等问题,解决方法分为两步. 1.在网络连接中禁用vEthernet连接. 2.控制面板>程序>程序和功能中 >启用或关闭wi ...

  10. docker 拷贝镜像文件

    1.概述 我们制作好镜像后,有时需要将镜像复制到另一台服务器使用. 能达到以上目的有两种方式,一种是上传镜像到仓库中(本地或公共仓库),但是另一台服务器很肯能只是与当前服务器局域网想通而没有公网的,所 ...