多文件协作,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 = ;//全局变量 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、头文件的更多相关文章
- extern与头文件(*.h)的区别和联系
原文网址为:http://lpy999.blog.163.com/blog/static/117372061201182051413310/ 个人认为有一些道理:所以转过来学习了. 用#include ...
- [转]extern与头文件(*.h)的区别和联系
用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx. ...
- .c和.h文件的区别(头文件与之实现文件的的关系~ )
.c和.h文件的区别 一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢 ...
- 利用 Symbol Type Viewer 工具实现将 pdb 文件 转换为 c\c++ 头文件
利用 Symbol Type Viewer 工具实现将 pdb 文件 转换为 c\c++ 头文件 一.得到符号 二.将符号转换为 .h 文件 三.得到 c\c++ 头文件,之后编程时直接导入这个文件即 ...
- linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)
原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是 ...
- C++ 多文件编译简述:头文件、链接性、声明与定义
目录 Commen Sense 头文件 链接性 static 与链接性控制 extern 与外部链接性 Reference Commen Sense C++ 在编译时对每个翻译单元(Translati ...
- 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件
主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...
- C/C++不同文件夹下包含头文件的方法及#include的使用
转自:http://blog.sina.com.cn/s/blog_6e0693f70100so42.html 本文主要介绍了如何不同文件夹下使用预处理器指示符#include. 假设我们有如下一个工 ...
- 文件类型分类:头文件dirent.h中定义的文件类型与linux内文件符号对应关系
头文件 dirent.h 定义了文件类型: enum{ DT_UNKNOWN = 0, //未知类型 DT_FIFO = 1, //first in, ...
- 删除moduleCache下文件解决预编译头文件相关的编译错误
之前有在代码全部正确的情况下,遇到过下面的编译错误: fatal error: file '.....h' has been modified since the precompiled header ...
随机推荐
- fiddler 笔记-重定向
重定向功能:主要是进行会话的拦截,然后替换原始资源的功能 选择请求-到autoresponser面板-勾选 enable rules :add rules 设置如下: 2 在浏览器中请示url-页面跳 ...
- 一、hadoop部署
一.Java环境 yum 安装方式安装 1.搜索JDK安装包 yum search java|grep jdk 2.安装 yum install java-1.8.0-openjdk-src.x86_ ...
- 一、Dev
一.获取选中的表格 // MessageBox.Show(gridview_Parent.GetFocusedDataRow()["series"].ToString());//获 ...
- powerdesigner 16.5 不允许有扩展属性,或对象不存在
创建完之后这边会出现 选择刚创建的用户 这样就可以了
- linux按时间查询日志
在系统应用集中部署的时候,很多日志因为太多难以定位,获取某段时间的日志是对运维人员非常关键的事情. 一.sed查看某时间段到现在的系统日志: sed -n '/May 20 17/,$p' / ...
- 洛谷 P3951 小凯的疑惑
题目链接 一开始看到这题,我的内心是拒绝的. 以为是同余类bfs,一看数据1e9,发现只能允许O(1)的算法,数学还不太好,做不出来,其实应该打表找规律. 看到网上的题解,如果两个都必须拿,结果一定是 ...
- 【数学建模】day08-数理统计III
2. 回归分析 回归分析与曲线拟合区分. 曲线拟合是,根据得到的若干有关变量的一组数据,寻找因变量与(一个或几个)自变量之间的一个函数,使这个函数对那组数据拟合得好.通常,函数的形式可以由经验.先验知 ...
- Nginx+uwsgi部署 Diango(生产环境)
环境:CentOS6.5 + Nginx1.11.5 + Python3.5.2 1. 安装基础软件包 yum install -y zlib-devel bzip2-devel \ pcre-dev ...
- IDEA Failed to prepare an update: Temp directory inside installation
具体错误: Connection Error Failed to prepare an update: Temp directory inside installation: F:\IDEA_Tool ...
- 洛谷P1216数字三角形题解
题目 这道题是一个典型的DP,可以用倒推,顺推的方法,来解这道题.当然用不同的方法他的循环次序是不一样的,所以我们一定要深刻地理解题目的大意,再采用状态转移方程与边界每次求出最优解,并记录循环一遍后就 ...