Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ для ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 18

Автор C. Π‘ΠΎΡ‡ΠΊΠΎΠ²

char *strcpy (char *result, char *ishod);

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² объявлСнии, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² диагностичСском сообщСнии компилятора языка Π‘ΠΈ, Π² случаС нСсоотвСтствия Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°ΠΌ Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅.

Π€Π°ΠΉΠ»Ρ‹ стандартного Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° БП MSC вСрсии 5.0 ΠΈ БП Π’Π‘ содСрТат объявлСния ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹, ΠΈ практичСски вся информация, нСобходимая для обращСния ΠΊ функциям, Π±ΡƒΠ΄Π΅Ρ‚ Ρƒ Вас ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° объявлСния ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ объявлСниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ класса памяти register.

ΠšΠ»Π°ΡΡΡ‹ памяти

БпСцификация класса памяти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ опрСдСляСт, ΠΊΠ°ΠΊΠΎΠ΅ врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ (глобальноС ΠΈΠ»ΠΈ локальноС), ΠΈ влияСт Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ сущСствуСт ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° протяТСнии всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ глобальноС врСмя ΠΆΠΈΠ·Π½ΠΈ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ выдСляСтся новая ячСйка памяти ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся Π±Π»ΠΎΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. Когда ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ возвращаСтся ΠΈΠ· Π±Π»ΠΎΠΊΠ°, пСрСмСнная тСряСт своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ языкС Π‘ΠΈ имССтся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ спСцификации класса памяти:

auto

register

static

extern

ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… со спСцификациСй класса памяти extern, распространяСтся Π½Π° всС исходныС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ; ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ· любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² любом исходном Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ классов памяти auto ΠΈ register ΠΈΠΌΠ΅ΡŽΡ‚ локальноС врСмя ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ static ΠΈ extern ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ.

Π’ совокупности с мСстополоТСниСм объявлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° спСцификация класса памяти опрСдСляСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π΅Ρ€ΠΌΠΈΠ½ "ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия" опрСдСляСт Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ доступ. НапримСр, пСрСмСнная с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ сущСствуСт Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступна Π½Π΅ Π²ΠΎ всСх частях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΈ связанноС с Π½Π΅ΠΉ понятиС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ рассмотрСны Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 2.4.

ОбъявлСния, располоТСнныС Π²Π½Π΅ Ρ‚Π΅Π» всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, относятся ΠΊ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ, Π° объявлСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ относятся ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ. ΠžΡΠΎΠ±Ρ‹ΠΉ случай ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ объявлСния Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… описываСтся смысл спСцификаций класса памяти для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° объявлСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΠ½ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π° умолчания Π² случаС отсутствия Π² объявлСнии спСцификации класса памяти.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ со спСцификациСй класса памяти static ΠΈΠ»ΠΈ extern Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· спСцификации класса памяти. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ всСгда ΠΈΠΌΠ΅ΡŽΡ‚ глобальноС врСмя ΠΆΠΈΠ·Π½ΠΈ.

ОбъявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡƒΡ‰Π΅Π½Π° спСцификация класса памяти, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ объявлСниям со спСцификациСй класса памяти extern.

Если Π² объявлСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ спСцифицирован класс памяти static, Ρ‚ΠΎ ΠΈ Π² Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½ класс памяти static (это Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ для БП Π’Π‘).

ОбъявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎ смыслу эквивалСнтно объявлСнию внСшнСго уровня, Ρ‚. Π΅. ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ распространяСтся Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π±Π»ΠΎΠΊΠ°, Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… спСцификаций класса памяти рассмотрСна ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 2.4 "ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия".

ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅

ОбъявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ спСцификации класса памяти static ΠΈ extern ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΈΡ…. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ класса памяти auto ΠΈ register Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅.

ОбъявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° внСшнСм уровнС—это Π»ΠΈΠ±ΠΎ опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π»ΠΈΠ±ΠΎ объявлСния, Ρ‚.Π΅. ссылки Π½Π° опрСдСлСния, сдСланныС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ внСшнСй пСрСмСнной—это объявлСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти для этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π΅ (явно ΠΈΠ»ΠΈ нСявно). ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…:

1) ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡƒΡ‚Π΅ΠΌ Π΅Π΅ объявлСния со спСцификациСй класса памяти static. Вакая пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ явно ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Если ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ отсутствуСт, Ρ‚ΠΎ пСрСмСнная автоматичСски инициализируСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²ΠΎ врСмя компиляции. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· объявлСний:

static int k = 16;

ΠΈ

static int k;

рассматриваСтся ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

2) ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Ссли спСцификация класса памяти Π² Π΅Π΅ объявлСнии ΠΎΠΏΡƒΡ‰Π΅Π½Π°, ΠΈ пСрСмСнная явно инициализируСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

int j = 3;

ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅, распространяСтся ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π³Π΄Π΅ ΠΎΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° исходного Ρ„Π°ΠΉΠ»Π°. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ нСдоступна Π²Ρ‹ΡˆΠ΅ своСго опрСдСлСния Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ самом исходном Ρ„Π°ΠΉΠ»Π΅. На Π΄Ρ€ΡƒΠ³ΠΈΠ΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ распространяСтся лишь Π² Ρ‚ΠΎΠΌ случаС, Ссли Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ содСрТит спСцификации класса памяти static ΠΈ Ссли Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… исходных Ρ„Π°ΠΉΠ»Π°Ρ… имССтся Π΅Π΅ объявлСниС.

Если Π² объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Π½Π° спСцификация класса памяти static, Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… исходных Ρ„Π°ΠΉΠ»Π°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ классом памяти. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ static доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… своСго исходного Ρ„Π°ΠΉΠ»Π°.

БпСцификация класса памяти extern ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΈΠ΅ объявлСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² случаС, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ исходный Ρ„Π°ΠΉΠ» ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ исходном Ρ„Π°ΠΉΠ»Π΅, Π»ΠΈΠ±ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ доступной Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ исходном Ρ„Π°ΠΉΠ»Π΅ Π²Ρ‹ΡˆΠ΅ Π΅Π΅ опрСдСлСния. ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ распространяСтся ΠΎΡ‚ мСста объявлСния Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° исходного Ρ„Π°ΠΉΠ»Π°.

Π’ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ класса памяти extern, инициализация Π½Π΅ допускаСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС.

КаТдая пСрСмСнная внСшнСго уровня ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΈΠ· исходных Ρ„Π°ΠΉΠ»ΠΎΠ², ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

БущСствуСт ΠΎΠ΄Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡ€Π°Π²ΠΈΠ», описанных Π²Ρ‹ΡˆΠ΅. МоТно ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ класса памяти, ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. НапримСр, объявлСниС int n; Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ внСшним объявлСниСм. Π­Ρ‚ΠΎ объявлСниС ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ смысл Π² зависимости ΠΎΡ‚ контСкста:

1) Если Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ исходном Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ исходном Ρ„Π°ΠΉΠ»Π΅) Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ объявлСниС являСтся ссылкой Π½Π° это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π’ этом случаС объявлСниС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ объявлСнию со спСцификациСй класса памяти extern.

2) Если ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅Ρ‚, Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ объявлСниС само считаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. На этапС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая инициализируСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ имССтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ выдСляСмой памяти Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° срСди всСх объявлСний этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. НапримСр, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит Π΄Π²Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅ int i; ΠΈ char i;, Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i Ρ‚ΠΈΠΏΠ° int.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ описании языка Π‘ΠΈ, Π΄Π°Π½Π½ΠΎΠΌ Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π² [1], отсутствовала ясная Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²ΠΊΠ° понятий объявлСния ΠΈ опрСдСлСния глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ компиляторы языка Π‘ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ схСмы Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ситуаций. Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π·Π±ΠΎΡ€Π°, описанная Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, рассматриваСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‰ΠΈΠΉ Π±Π»ΠΎΠΊ, раздСляСмый нСсколькими исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ пСрСмСнная фактичСски прСдставляСт собой Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, которая раздСляСтся нСсколькими исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.

РСкомСндуСтся всСгда ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для помСщСния Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ выявлСния случаСв Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ совпадСния ΠΈΠΌΠ΅Π½ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Если пСрСмСнная Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°, Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π΄Π²Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… объявлСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ сообщит ΠΎΠ± ошибкС.