глобальная переменная может состоять из одного-двух разных классов хранения в C, насколько мне известно, и объявление может быть дано с двумя разными ключевыми словами, соответственно
extern int foo; //default
static int bar;
Статические переменные видны только внутри модулядекларации, и не могут быть экспортированы.В случае объявления extern переменная находится в общем пространстве имен всех связанных модулей, если только она не скрыта статической переменной.
В то время как статические переменные должны быть определены в их модуле, переменная extern может быть определена где-то еще.Он должен быть определен, если он когда-либо используется.
Мой компилятор (GCC) принимает
static int bar = 5;
, но подает жалобу на
extern int foo = 4;
Кажется, ожидается, чтоПеременные extern никогда не определяются с помощью ключевого слова extern.Это приводит к следующему вопросу :
Какой класс хранилища имеет объект 'foo' в приведенном выше примере в модуле, где он определен?