Global variables and scope - C

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

I am having small problem in making a global variable works. I am using Visual Studio 2008 and standard C++.

I have two projects, one is a static library and second one is a test program which uses this library. I have a global variable in global.h like

#ifndef GLOBAL_H
#define GLOBAL_H

#include <string>

extern std::string globalWord;

#endif // GLOBAL_H!

I have a global.cpp where I am initializing this variable. This variable is used inside my library project. I am setting a value to this variable from the test project, but that value is not getting reflected in the library project.

I have debugged and it shows the new value in test project, but when the control reaches the library project, this variable value shows empty. So is this global variable s scope only limited to the project where it belongs to?

Or is there a better way to do this? I don t want to modify my function or constructor parameters in my library to pass this value.

Any help would be great.

Edit:

Here is how this variable is declared in global.cpp

#include <string>
#include "../global.h"

std::string globalWord = "";

This is how I used it in my library

#include "../global.h"
string text = globalWord;

Thanks

Answers

Don t use global variables. Just don t. Much better, if you HAVE to have globally accessible data, is to use a global function which will return globalWord, like this:

std::string globalWord()
{
    static std::string word("Hi Mom");
    return word;
}

This saves you from initialization order issues (read Effective C++ item #4).

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/544462/global-variables-and-scope-c

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils