Глобальная переменная в нескольких файлах
У меня есть два исходных файла, которым необходимо получить доступ к общей переменной. Каков наилучший способ сделать это? например:.
source1.cpp:
int global;
int function();
int main()
{
global=42;
function();
return 0;
}
source2.cpp:
int function()
{
if(global==42)
return 42;
return 0;
}
Должно ли объявление переменной global быть статическим, extern или должно быть в файле заголовка, включенном обоими файлами и т.д.?
Ответы
Ответ 1
Глобальная переменная должна быть объявлена extern
в файле заголовка, включенном обоими исходными файлами, а затем определена только в одном из этих исходных файлов:
common.h
extern int global;
source1.cpp
#include "common.h"
int global;
int function();
int main()
{
global=42;
function();
return 0;
}
source2.cpp
#include "common.h"
int function()
{
if(global==42)
return 42;
return 0;
}
Ответ 2
Вы добавляете "файл заголовка", который описывает интерфейс для модуля source1.cpp:
source1.h
#ifndef SOURCE1_H_
#define SOURCE1_H_
extern int global;
#endif
source2.h
#ifndef SOURCE2_H_
#define SOURCE2_H_
int function();
#endif
и добавьте оператор #include в каждый файл, который использует эту переменную, и (важный), который определяет переменную.
source1.cpp
#include "source1.h"
#include "source2.h"
int global;
int main()
{
global=42;
function();
return 0;
}
source2.cpp
#include "source1.h"
#include "source2.h"
int function()
{
if(global==42)
return 42;
return 0;
}
Хотя это необязательно, я предлагаю имя source1.h для файла, чтобы показать, что он описывает публичный интерфейс к модулю source1.cpp. Точно так же source2.h описывает, что доступно публике в source2.cpp.
Ответ 3
В одном файле вы объявляете его как в source1.cpp, во втором объявляете его как
extern int global;
Конечно, вы действительно не хотите этого делать и, вероятно, должны задать вопрос о том, чего вы пытаетесь достичь, поэтому люди здесь могут дать вам другие способы его достижения.