Использование одной и той же переменной в нескольких файлах на C++
в процессе изменения некоторого кода я разлил некоторые функции в несколько файлов. У меня есть файлы controls.cpp
и display.cpp
и я хотел бы иметь доступ к одному и тому же набору переменных в обоих файлах. Я не возражаю, где они инициализируются или объявляются, если функции в обоих файлах могут их использовать.
это не было проблемой, когда функции были в одном файле, но теперь это кажется почти невозможным после часа поиска в интернете и попытки различных вещи.
5 ответов
определите переменную в одном файле, например:
type var_name;
и объявить его глобальным в другом файле, например:
extern type var_name;
использовать эти переменные как extern
т. е.
extern int i;
в другом файле объявите то же, что и обычная глобальная переменная...
int i;//global
создайте два новых файла:
- что-то вроде
Globals.h
и объявить все переменные как:extern type name;
- btw помните, включают охранников.
- что-то вроде
Globals.cpp
и объявить переменные, такие как:type name;
затем добавить #include "Globals.h"
вверху:
Globals.cpp
controls.cpp
display.cpp
затем вам может потребоваться инициализация некоторых функций их.
по сути, все, что вам нужно сделать, это объявить переменную один раз в одном файле кода и объявить ее в других как extern (убедитесь, что не инициализировать ее, когда вы объявляете ее extern, или некоторые компиляторы будут игнорировать ключевое слово extern, давая вам ошибки компилятора.)
самый простой способ сделать это-использовать макрос в заголовочном файле, такие как:
#pragma once
#ifdef __MAIN__
#define __EXTERN(type, name, value) type name = value
#else
#define __EXTERN(type, name, value) extern type name;
#endif
а затем объявите свои переменные в том же заголовочном файле, например:
__EXTERN(volatile int, MyVolatileInteger, 0);
из любого Один файл в проекте, включает файл заголовка, например:
#define __MAIN__
#include "Globals.h"
из всех остальных, просто включите его нормально, вроде такого:
#include "Globals.h"
вуаля, все готово. Переменные объявляются только один раз и инициализируются в строке. Это очень ремонтопригодно и избавляет вас от необходимости объявлять все дважды.
все объявления вы хотите видеть в нескольких единицах компиляции (.cpp files), должен войти в файл заголовка, который вы включаете во всех местах, где необходимо использовать переменную, тип, класс и т. д.
Это намного лучше, чем extern, который по существу скрывает ваше намерение поделиться декларацией.