Глобальная переменная в нескольких файлах
у меня есть два исходных файла, которые должны получить доступ к общей переменной. Каков наилучший способ сделать это? например:
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, или оно должно быть в заголовочном файле, включенном обоими файлами и т. д.?
3 ответов:
глобальная переменная должна быть объявлена
externв заголовочном файле, включенном в оба исходных файла, а затем определенном только в одном из этих исходных файлов:общие.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; }
вы добавляете "файл заголовка", который описывает интерфейс к модулю source1.cpp:
source1.h
#ifndef SOURCE1_H_ #define SOURCE1_H_ extern int global; #endifsource2.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.СРР. Таким же образом source2.h описывает то, что является общедоступным в source2.СРР.
в одном файле вы объявляете его как в source1.cpp, во втором вы объявляете его как
extern int global;конечно, вы действительно не хотите этого делать и, вероятно, должны задать вопрос о том, чего вы пытаетесь достичь, чтобы люди здесь могли дать вам другие способы достижения этого.
Comments