LINUX.ORG.RU

История изменений

Исправление Norong, (текущая версия) :

У меня возникли ещё вопросы о внешних переменных:

Внешняя переменная должна быть определена ровно один раз за пределами всех функций программы. ... Она также должна быть объявлена в каждой функции, которая к ней обращается, с указанием её типа. Объявление может быть явным, с помощью оператора extern, а может быть и неявным - по контексту.

Какая в контексте этого абзаца разница между определением переменной и её объявлением?

Дальше:

ровно один раз за пределами всех функций программы.

А если у меня несколько файлов исходного кода, и я хочу, чтобы внешняя переменная из одного файла использовалась в других, то я должен как минимум в одном файле исходного кода (любом) объявить переменную без extern вне функций, а в остальных - с extern или без вне функций, и/или с extern внутри тех функций, в которых я хочу её использовать? А могу ли я такую переменную объявить внутри функции без extern, и будет ли разница?

Ты говорил:

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

Правильно ли я понимаю, что без extern происходит либо отведение памяти под переменную, либо обращение к уже существующей, а с extern - только обращение к уже существующей? Если да, то что из этого делает компилятор, а что - компоновщик?

Исходная версия Norong, :

У меня возникли ещё вопросы о внешних переменных:

Внешняя переменная должна быть определена ровно один раз за пределами всех функций программы. ... Она также должна быть объявлена в каждой функции, которая к ней обращается, с указанием её типа. Объявление может быть явным, с помощью оператора extern, а может быть и неявным - по контексту.

Какая в контексте этого абзаца разница между определением переменной и её объявлением?

Дальше:

ровно один раз за пределами всех функций программы.

А если у меня несколько файлов исходного кода, и я хочу, чтобы внешняя переменная из одного файла использовалась в других, то я должен как минимум в одном файле исходного кода (любом) объявить переменную без extern вне функций, а в остальных - с extern или без вне функций, и/или с extern внутри тех функций, в которых я хочу её использовать? А есть ли разница, буду ли я такую переменную объявлять с extern или без оного, если объявляю я внутри функции?

Ты говорил:

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

Правильно ли я понимаю, что без extern происходит либо отведение памяти под переменную, либо обращение к уже существующей, а с extern - только обращение к уже существующей? Если да, то что из этого делает компилятор, а что - компоновщик?