Как обменяться между различными .c файлами?

начальный вопрос о декларации C:

В .c файле, как использовать переменные, определенные в другом .c файле?

Ответ 1

В файлеA.c:

int myGlobal = 0;

В файлеA.h

extern int myGlobal;

В файлеB.c:

#include "fileA.h"
myGlobal = 1;

Так вот как это работает:

  • переменная живет в файлеA.c
  • fileA.h сообщает миру, что он существует, и каков его тип (int)
  • fileB.c включает fileA.h, чтобы компилятор знал о myGlobal, прежде чем fileB.c попытается его использовать.

Ответ 2

  • Старайтесь избегать глобальных привязок. Если вы должны использовать глобальный, см. Другие ответы.
  • Передайте его как аргумент функции.

Ответ 3

если переменная:

int foo;

во втором файле C, который вы заявляете:

extern int foo;

Ответ 4

В 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 файл.

Ответ 5

Эти другие переменные должны быть объявлены общедоступными (используйте extern, public для С++), и вам придется включить этот .c файл. Однако я рекомендую создавать соответствующие файлы .h для определения всех ваших переменных.

Например, для hello.c у вас будет hello.h, и hello.h сохранит ваши определения переменных. Тогда другой .c файл, например world.c, должен иметь этот кусок кода вверху:

#include "hello.h"

Это позволит world.c использовать переменные, которые определены в hello.h

Это немного сложнее, чем это. Вы можете использовать < > включить файлы библиотек, найденные на вашем пути к ОС. Будучи новичком, я буду хранить все ваши файлы в одной папке и использовать синтаксис ".".

Ответ 6

Второй файл должен знать о существовании вашей переменной. Для этого вы снова объявляете переменную, но перед ней следует использовать ключевое слово extern. Это сообщает компилятору, что переменная доступна, но объявлена ​​где-то в другом месте, тем самым предотвращая ее инициализацию (опять же, что приведет к конфликтам при связывании). Хотя вы можете поместить объявление extern в сам файл C, общий стиль имеет файл сопроводительного заголовка (т.е. .h) для каждого файла .c, который предоставляет функции или переменные другим, которые содержат объявление extern. Таким образом, вы избегаете копирования объявления extern, особенно если оно используется в нескольких других файлах. То же самое относится к функциям, хотя для них не требуется ключевое слово extern.

Таким образом, у вас будет как минимум три файла: исходный файл, объявляющий переменную, заголовок acompanying, который объявляет extern и второй исходный файл, который #include заголовок получает доступ к экспортируемой переменной ( или любой другой символ, экспортированный в заголовок). Конечно, вам нужны все исходные файлы (или соответствующие объектные файлы) при попытке связать что-то подобное, поскольку компоновщик должен разрешить символ, который возможен только в том случае, если он действительно существует в связанных файлах.