Использование одной и той же переменной в нескольких файлах на C++

в процессе изменения некоторого кода я разлил некоторые функции в несколько файлов. У меня есть файлы controls.cpp и display.cpp и я хотел бы иметь доступ к одному и тому же набору переменных в обоих файлах. Я не возражаю, где они инициализируются или объявляются, если функции в обоих файлах могут их использовать.

это не было проблемой, когда функции были в одном файле, но теперь это кажется почти невозможным после часа поиска в интернете и попытки различных вещи.

5 ответов


определите переменную в одном файле, например:

type var_name;

и объявить его глобальным в другом файле, например:

extern type var_name;

использовать эти переменные как extern т. е.

extern int i;

в другом файле объявите то же, что и обычная глобальная переменная...

int i;//global

создайте два новых файла:

  1. что-то вроде Globals.h и объявить все переменные как: extern type name;
    • btw помните, включают охранников.
  2. что-то вроде 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, который по существу скрывает ваше намерение поделиться декларацией.