начальный вопрос о декларации C:
В .c файле, как использовать переменные, определенные в другом .c файле?
начальный вопрос о декларации C:
В .c файле, как использовать переменные, определенные в другом .c файле?
В файлеA.c:
int myGlobal = 0;
В файлеA.h
extern int myGlobal;
В файлеB.c:
#include "fileA.h"
myGlobal = 1;
Так вот как это работает:
int
)если переменная:
int foo;
во втором файле C, который вы заявляете:
extern int foo;
В 99,9% всех случаев плохой дизайн программы позволяет делиться не постоянными глобальными переменными между файлами. Очень мало случаев, когда вам действительно нужно это делать: они настолько редки, что я не могу придумать какие-либо действительные случаи. Возможно, декларации аппаратных регистров.
В большинстве случаев вам нужно либо использовать (возможно, встроенные) функции setter/getter ( "public" ), статические переменные в области файлов ("private"), либо неполные реализации типов ("private").
В тех редких случаях, когда вам нужно разделить переменную между файлами, выполните следующие действия:
// file.h
extern int my_var;
// file.c
#include "file.h"
int my_var = something;
// main.c
#include "file.h"
use(my_var);
Никогда не помещайте произвольное определение переменной в h файл.
Эти другие переменные должны быть объявлены общедоступными (используйте extern, public для С++), и вам придется включить этот .c файл. Однако я рекомендую создавать соответствующие файлы .h для определения всех ваших переменных.
Например, для hello.c у вас будет hello.h, и hello.h сохранит ваши определения переменных. Тогда другой .c файл, например world.c, должен иметь этот кусок кода вверху:
#include "hello.h"
Это позволит world.c использовать переменные, которые определены в hello.h
Это немного сложнее, чем это. Вы можете использовать < > включить файлы библиотек, найденные на вашем пути к ОС. Будучи новичком, я буду хранить все ваши файлы в одной папке и использовать синтаксис ".".
Второй файл должен знать о существовании вашей переменной. Для этого вы снова объявляете переменную, но перед ней следует использовать ключевое слово extern
. Это сообщает компилятору, что переменная доступна, но объявлена где-то в другом месте, тем самым предотвращая ее инициализацию (опять же, что приведет к конфликтам при связывании). Хотя вы можете поместить объявление extern
в сам файл C, общий стиль имеет файл сопроводительного заголовка (т.е. .h
) для каждого файла .c
, который предоставляет функции или переменные другим, которые содержат объявление extern
. Таким образом, вы избегаете копирования объявления extern
, особенно если оно используется в нескольких других файлах. То же самое относится к функциям, хотя для них не требуется ключевое слово extern
.
Таким образом, у вас будет как минимум три файла: исходный файл, объявляющий переменную, заголовок acompanying, который объявляет extern
и второй исходный файл, который #include
заголовок получает доступ к экспортируемой переменной ( или любой другой символ, экспортированный в заголовок). Конечно, вам нужны все исходные файлы (или соответствующие объектные файлы) при попытке связать что-то подобное, поскольку компоновщик должен разрешить символ, который возможен только в том случае, если он действительно существует в связанных файлах.