dC++ 中我们希望在不同cpp文件中共享常量和变量。下面我们分别讨论:
1. 对于全局常量,我们可以用 const 限定词即可。例:
在para.h中以下内容
#pragma once
const double Pi=3.1415926;
可在不同文件中包含头para.h 的方式调用全局常量。
如 在main.cc 中
#include <iostream>
#include "para.h" //调用全局常量 pi
#include "circle.h" //调用circle 函数
using namespace std;
int main(){
cout<<"Pi="<<Pi<<endl;
print_unit_cirle_area();
}
在circle.h 中
#include<iostream>
#include "para.h"
using namespace std;
void print_unit_cirle_area();
在circle.cc 中
#include "circle.h"
void print_unit_cirle_area(){
cout<<"Area of a unit circle is"<<Pi*1*1<<endl;
}
在circle.cc 和 main.cc 文件中都引用了全局常量Pi的值。 编绎 g++ main.cc circle.cc 结果是
Pi=3.14159
Area of a unit circle is3.14159
1. 对于全局变量,我们不能直接去掉const的方法。如将para.h 中的Pi 的const 去掉会报错。
原因是double Pi=3.1415926; 在main.cc 和circle.cc 中变量PI重复定义,变量重复定义会报错。(对于常量C++语法允许!)为了防止变量重新定义,在头文件para.h 中声明全局变量,然后在
任意一处源文件中定义一次即可。 例:
在para.h中以下内容
#pragma once
const double Pi=3.1415926;
extern double R;
在main.cc中
#include <iostream>
#include "para.h" //调用全局常量 pi
#include "circle.h" //调用circle 函数
using namespace std;
double R=3;
int main(){
cout<<"Pi="<<Pi<<endl;
cout<<"Radius="<<R<<endl;
print_cirle_area();
}
在circle.h 中
#include<iostream>
#include "para.h"
using namespace std;
void print_cirle_area();
在circle.cc 中
#include "circle.h"
void print_cirle_area(){
cout<<"Area of the circle is"<<Pi*R*R<<endl;
}
编绎 g++ main.cc circle.cc 结果是
Pi=3.14159
Radius=3
Area of the circle is28.2743
总结:
1. 对于全局常量,只要在头文件中加上 const double a=1.3; 形式,在不同的cpp文件中调用即可。
2. 对于全局变量,在头文件中用extern声明 extern double a; 然后在任意的cpp文件中 定义 double a=1.3; 即可; 在别的cpp文件中加入声明a的头文件即可。(不能同时 extern double a=1.3) 这样会引起变量重复定义的错误。