关于在C++头文件中定义全局变量的问题

最近写一个程序,因为比较复杂,一共有十几个.cpp和.h文件。因为多数函数都要操作一个vector,用call-by-reference当然没有问题,但每个函数都这么写就觉得没必要了。于是我打算定义全局变量。开始我打算像定义常量一样写到头文件里面,可是每次编译的时候都会报重复定义的错。在网上搜了半天,找到了一个理想的解决办法。

我写了一个简单的例子:

首先在一个cpp源文件里面定义全局变量。我是在”main.cpp”里定义的。

#include <cstdlib>
#include "func.h"

using namespace std;

/* Global Variables */
double _a;
double _b;

int main(int argc, char *argv[]){
    _a = atof(argv[1]);
    _b = atof(argv[2]);

    display();

    return 0;
}

 

然后在“global.h”来存放全局变量(用”extern”来告诉编译器,此变量已在别处定义了)

#ifndef GLOBAL_H_ANELS
#define GLOBAL_H_ANELS

extern double _a;
extern double _b;

#endif /* GLOBAL_H_ANELS */

接下来,只要include这个头文件,就可以正常访问这个全局变量了。

“func.cpp”:

#include <iostream>

#include "global.h"

using namespace std;

void display() {
    cout<<"The first global variable is "<<_a<<endl;
    cout<<"The second global variable is "<<_b<<endl;
}

“func.h”:

#ifndef FUNC_H_ANELS
#define FUNC_H_ANELS

void display();

#endif /* FUNC_H_ANELS */

最后附上makefile:

CXX = g++

demo: demo.o func.o
$(CXX) demo.o func.o -o demo

func.o: func.cpp
$(CXX) -c func.cpp -I.
demo.o: demo.cpp
$(CXX) -c demo.cpp -I.

clean:
rm -rf *o demo

执行。。。

make
./demo 100 200

The first global variable is 100
The second global variable is 200

 

是不是很销魂?

原创文章,转载请注明: 转载自 iDEAnels

本文地址: 关于在C++头文件中定义全局变量的问题

Leave a Reply

Your email address will not be published. Required fields are marked *