多文件的变量和函数共享
利用关键字extern,实现全局变量的共享
extern 变量只能一次定义(声明定义), 多次声明。
声明:
extern int a ;
int a ;
(声明)定义:
extern int a = 0;
int a = 0 ;
一、两个cpp文件之间共享
===test.cpp===
#include<iostream>
using namespace std;
int a = 0; //定义变量
void jisuan(int b) //定义函数
{
a += b;
cout << "test.cpp:"<<a<<endl;
}
===main.cpp===
#include <iostream>
using namespace std;
extern int a; //引用test.cpp中的a变量
extern void jisuan(int b); //函数声明,必须先声明
int main(int argc, char** argv) {
jisuan(2); //调用后,a=2
cout << "main:" << a<<endl;
return 0;
}
结果:
二、有头文件的文件间共享
=====test.h====
#ifndef _TEST_H_
#define _TEST_H_
extern int a; //声明
void jisuan(int b); //函数声明
#endif
====test.cpp===
#include<iostream>
using namespace std;
int a = 0 ; //定义
void jisuan(int b) //定义
{
a += b;
cout << "test.cpp:"<<a<<endl;
}
====main.cpp===
#include <iostream>
#include"test.h"
using namespace std;
//extern int a = 8; 错误,不能多次定义这个全局变量a
//extern int a ; //包含了头文件,变量和函数则不需要再次声明,也可以声明变量,表示其是引用
//extern void jisuan(int);
int main(int argc, char** argv) {
jisuan(2);
cout << "main:" << a<<endl;
int a = 7; //定义局部变量a
cout << "main:" << a<<endl;
return 0;
}
结果:
三、第二种的修改,在头文件中声明定义全局变量
=====test.h====
#ifndef _TEST_H_
#define _TEST_H_
int a = 0; //声明并且定义
void jisuan(int b); //函数声明
#endif
====test.cpp===
#include<iostream>
using namespace std;
extern int a ; //声明引用
void jisuan(int b) //定义
{
a += b;
cout << "test.cpp:"<<a<<endl;
}
====main.cpp===
#include <iostream>
#include"test.h"
using namespace std;
int main(int argc, char** argv) {
jisuan(2);
cout << "main:" << a<<endl; //头文件中有全局遍量a
int a = 7; //定义局部变量a
cout << "main:" << a<<endl;
return 0;
}
结果: