Это определение глобальной переменной с необязательной инициализацией для определенного значения:
int i = 8;
Обратите внимание, что это не код, который когда-либо выполняется, переменная будет просто установлена в исходное значениесодержат 8. либо считают его «волшебным» (полезная модель для многих вещей, которые на самом деле не определены стандартом), либо представьте таблицы со значениями, копируемыми в ячейки памяти до выполнения любого кода.
Это фрагмент кода, у которого нет «фрейма», в котором он выполняется.
(Или вы намерены это сделать. Компилятор другого мнения, см. Ниже.)
i = 9;
Нет функции, содержащей его.Не ясно, когда это должно быть выполнено.Это то, что не нравится компилятору.
В C весь код должен находиться внутри функции и будет выполняться только в том случае, если эта функция вызывается, например, из main()
.
Другой язык, в основномте, которые выполняют «сценарии» путем их интерпретации (вместо того, чтобы код превращался в исполняемые файлы, например, компилятором), позволяют иметь код где угодно.C отличается.
Компилятор видит это по-другому:
i = 9;
- он не внутри функции, поэтому он не может быть кодом
- он выглядит какопределение переменной, предполагая, что вы имеете в виду
int
, то есть значение по умолчанию - , но полагаться на значения по умолчанию не очень хорошая идея, поэтому предупреждайте о пропущенном типе и что используется значение по умолчанию
- также, если является определением, то это второе определение для
i
, теперь это действительно неверно, поэтому покажите ошибку и откажитесь от компиляции - просто для того, чтобы быть полезнымупомяните, где первое определение
i
равно
Вот как можно прочитать вывод компилятора, который вы цитировали.