Что такое время жизни переменной p
, если он объявлен как extern int p;
Срок службы переменной «extern» в C?
Это статический, динамический, автоматический или он не имеет жизни, потому что нет никакой связи?
Что такое время жизни переменной p
, если он объявлен как extern int p;
Срок службы переменной «extern» в C?
Это статический, динамический, автоматический или он не имеет жизни, потому что нет никакой связи?
or it has no lifetime because there is no linkage?
Ключевое слово extern
означает, что переменная только объявлена, что никакое хранение не выделяется для него [1].
Ключевое слово extern
не имеет никакого отношения к времени жизни переменной. Тем не менее, время жизни/область действия переменной зависит только от того, где именно это происходит в коде.
Примечание
[1] Когда extern
используется с заданием, как
extern int i=5;
ключевое слово extern
игнорируется, и обычные правила сферы применимы к переменной
[2] Пожалуйста, проверьте мой другой [ answer ].
Interesing: Как Стивен Прата в своей книге C++ Primer Plus помещает это ключевое слово extern
означает "Использовать переменную с таким именем, ранее определенным внешним"
Вы говорите, что время жизни переменной зависит только от того, где именно это происходит в коде. Затем это означает, что если переменная объявлена в некоторой функции, она имеет автоматическое время жизни. Ответы других предполагают, что переменная extern имеет статический срок службы. Таким образом, это не должно быть только статическое время жизни? – user300046
@ lightness-races-in-orbit: Я хотел сказать 'decl-only'. но благодаря этому это имеет смысл. – sjsam
@display_error: Нет такой вещи, как «внешняя переменная», и другие ответы говорят об этом. –
Говоря о жизни имени, введенной extern
декларации не имеет особого смысла - срок хранения является собственностью объектов, не имен.
С другой стороны, объявление переменной extern
может ссылаться только на глобальную переменную, которая имеет статическую продолжительность хранения.
C11 проект раздела 6.2.4 говорит
An object whose identifier is declared without the storage-class specifier
_Thread_local
, and either with external or internal linkage or with the storage-class specifierstatic
, has static storage duration. Its lifetime is the entire execution of the program and its stored value is initialized only once, prior to program startup.
Nice. В качестве побочного примечания ключевое слово 'static' предназначено только для привязки, за исключением случаев, когда оно используется в' block scope'. – sjsam
Срок службы программы. Инициализируется один раз во время загрузки или запуска программы. Начальное значение по умолчанию равно 0. Невозможно инициализировать внутри блока.
Срок службы как статический. – i486
@ i486: Пожалуйста, не отвечайте в разделе комментариев. –
Раздел @LightnessRacesinOrbit Answers требует больше слов :) – i486