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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 66

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

Новый способ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²Π΅Π΄Π΅Π½ ANSI-стандартом. Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ нСбольшиС измСнСния Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠ°; Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии языка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° float слСдовало Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ double. Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ float ΠΈ double ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ, лишь ΠΊΠΎΠ³Π΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ гСнСрировался ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΠΎΠ²Ρ‹ΠΌ способом:

int max(int a, int b, int c)

{

    int m;


    m = (a > b) ? a: b;

    return (m > с) ? m : с;

}

Π—Π΄Π΅ΡΡŒ int-спСцификаторы-объявлСния; max(int a, int b, int с) - ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅Π»ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, a { ... } - Π±Π»ΠΎΠΊ, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ Π΅Π΅ ΠΊΠΎΠ΄. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ старым способом Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

int max(a, b, с)

int а, b, с;

{

    /* ... */

}

Π³Π΄Π΅ max(a, b, c) – ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅Π»ΡŒ, Π° int a, b, c - список-объявлСний для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

A10.2. Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ объявлСния

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ объявлСния ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ характСристики ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π’Π΅Ρ€ΠΌΠΈΠ½ "внСшний" здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ объявлСния располоТСны Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ; Π²ΠΏΡ€ΡΠΌΡƒΡŽ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом extern ("внСшний") ΠΎΠ½ Π½Π΅ связан. Класс памяти для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с внСшним объявлСниСм Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ указываСтся, Π»ΠΈΠ±ΠΎ спСцифицируСтся ΠΊΠ°ΠΊ extern ΠΈΠ»ΠΈ static.

Π’ ΠΎΠ΄Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ трансляции для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ нСсколько Π²Π½Π΅ΡˆΠ½ΠΈΡ… объявлСний, Ссли ΠΎΠ½ΠΈ ΡΠΎΠ³Π»Π°ΡΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ ΠΈ способу связи ΠΈ Ссли для этого ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° сущСствуСт Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ опрСдСлСния.

Π”Π²Π° объявлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ согласованными ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, рассмотрСнными Π² A8.10. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли объявлСния ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ лишь Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… Ρ‚ΠΈΠΏ структуры, объСдинСния ΠΈΠ»ΠΈ пСрСчислСния Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ (A8.3), Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ Ρ‚ΠΈΠΏ с Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ‚Π΅Π³ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ согласованными. Если Π΄Π²Π° Ρ‚ΠΈΠΏΠ° массива (A8.6.2) ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ лишь Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ согласованными. НаконСц, Ссли ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ спСцифицируСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ старым способом, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ - Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½ΠΎΠ²Ρ‹ΠΌ способом (с объявлСниями ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²), Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ согласованными.

Если ΠΏΠ΅Ρ€Π²ΠΎΠ΅ внСшнСС объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ΠΎ спСцификатором static, Ρ‚ΠΎ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ связь; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС - внСшнюю связь. Бпособы связСй ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² A11.2.

Π’Π½Π΅ΡˆΠ½Π΅Π΅ объявлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° считаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ, Ссли ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€. Π’Π½Π΅ΡˆΠ½Π΅Π΅ объявлСниС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ Π½Π΅Ρ‚ спСцификатора extern, считаСтся ΠΏΡ€ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. Если Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ трансляции появится ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ всС Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ±Π½Ρ‹Π΅ опрСдСлСния просто станут ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ объявлСниями. Если Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ опрСдСлСния для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ трансляции Π½Π΅ обнаруТится, Ρ‚ΠΎ всС Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ±Π½Ρ‹Π΅ опрСдСлСния Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ 0.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ связью это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ относится ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ трансляции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ связями Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹. Π’ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с внСшними связями ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ дСйствуСт Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Ρ†Π΅Π»ΠΎΠΌ.

Π₯отя ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ опрСдСлСния формулируСтся нСсколько ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии языка, ΠΏΠΎ сущСству ΠΎΠ½ΠΎ совпадаСт с ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ. НСкоторыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ ΠΎΡΠ»Π°Π±Π»ΡΡŽΡ‚, Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ трактуя понятиС ΠΏΡ€ΠΎΠ±Π½ΠΎΠ³ΠΎ опрСдСлСния. Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ распространСн Π² систСмах UNIX ΠΈ ΠΏΡ€ΠΈΠ·Π½Π°Π½ ΠΊΠ°ΠΊ общСпринятоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ стандарта, всС ΠΏΡ€ΠΎΠ±Π½Ρ‹Π΅ опрСдСлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с внСшними связями ΠΈΠ· всСх транслируСмых Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ вмСстС, Π° Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅. Если Π³Π΄Π΅-Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ обнаруТиваСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π½Ρ‹Π΅ опрСдСлСния становятся просто объявлСниями, Π½ΠΎ, Ссли Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ опрСдСлСния Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»ΠΎΡΡŒ, Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠ±Π½Ρ‹Π΅ опрСдСлСния становятся ΠΎΠ΄Π½ΠΈΠΌ-СдинствСнным ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ 0.

A11. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈ связи

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

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° Π²ΠΈΠ΄Π° областСй видимости: пСрвая - это лСксичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°: Ρ‚. Π΅. ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³Π΄Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ смысл всС Π΅Π³ΠΎ характСристики; вторая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ - это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ассоциируСмая с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ функциями, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ внСшниС связи, устанавливаСмыС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† трансляции.

A11.1. ЛСксичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости


ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… пространств ΠΈΠΌΠ΅Π½. Π­Ρ‚ΠΈ пространства Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связаны Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… смыслах Π΄Π°ΠΆΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ области видимости, Ссли ΠΎΠ½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΌ пространствам ΠΈΠΌΠ΅Π½. НиТС Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой пСрСчислСны классы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ нСзависимыС пространства: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, typedef-ΠΈΠΌΠ΅Π½Π° ΠΈ enum-константы; ΠΌΠ΅Ρ‚ΠΊΠΈ инструкций; Ρ‚Π΅Π³ΠΈ структур, объСдинСний ΠΈ пСрСчислСний; элСмСнты ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ структуры ΠΈΠ»ΠΈ объСдинСния.

Π‘Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΏΡ€Π΅ΠΆΠ½ΠΈΡ…, описанных Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·Π΄Π°Π½ΠΈΠΈ. ΠœΠ΅Ρ‚ΠΊΠΈ инструкций Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅ собствСнного пространства; Ρ‚Π΅Π³ΠΈ структур ΠΈ Ρ‚Π΅Π³ΠΈ объСдинСний (Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях ΠΈ Ρ‚Π΅Π³ΠΈ пСрСчислСний) ΠΈΠΌΠ΅Π»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ пространства. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π³ΠΎΠ² структур, объСдинСний ΠΈ пСрСчислСний Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±Ρ‰Π΅ΠΌ пространствС - это Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ. НаиболСС сущСствСнноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ каТдая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ структура (ΠΈΠ»ΠΈ объСдинСниС) создаСт своС собствСнноС пространство ΠΈΠΌΠ΅Π½ для своих элСмСнтов. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… структурах. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚.

ЛСксичСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), объявлСнного Π²ΠΎ внСшнСм объявлСнии, начинаСтся с мСста, Π³Π΄Π΅ заканчиваСтся Π΅Π³ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅Π»ΡŒ, ΠΈ простираСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ трансляции, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ объявлСн. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ начинаСтся с Π½Π°Ρ‡Π°Π»Π° Π±Π»ΠΎΠΊΠ°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ собой Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ распространяСтся Π½Π° всю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ; ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² описании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ заканчиваСтся Π² ΠΊΠΎΠ½Ρ†Π΅ этого описания. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, объявлСнного Π² Π½Π°Ρ‡Π°Π»Π΅ Π±Π»ΠΎΠΊΠ°, начинаСтся ΠΎΡ‚ мСста, Π³Π΄Π΅ заканчиваСтся Π΅Π³ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅Π»ΡŒ, ΠΈ продолТаСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° этого Π±Π»ΠΎΠΊΠ°. ΠžΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости ΠΌΠ΅Ρ‚ΠΊΠΈ являСтся вся функция, Π³Π΄Π΅ эта ΠΌΠ΅Ρ‚ΠΊΠ° встрСчаСтся. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости Ρ‚Π΅Π³Π° структуры, объСдинСния ΠΈΠ»ΠΈ пСрСчислСния начинаСтся ΠΎΡ‚ Π΅Π³ΠΎ появлСния Π² спСцификаторС Ρ‚ΠΈΠΏΠ° ΠΈ продолТаСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ трансляции для объявлСния внСшнСго уровня ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π±Π»ΠΎΠΊΠ° для объявлСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Если ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ явно объявлСн Π² Π½Π°Ρ‡Π°Π»Π΅ Π±Π»ΠΎΠΊΠ° (Π² Ρ‚ΠΎΠΌ числС Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), Ρ‚ΠΎ любоС объявлСниС Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, находящССся снаруТи этого Π±Π»ΠΎΠΊΠ°, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ пСрСстаСт Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π±Π»ΠΎΠΊΠ°.

A11.2. Бвязи

Если встрСчаСтся нСсколько объявлСний, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ), Ρ‚ΠΎ всС эти объявлСния Π² случаС внСшнСй связи относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) - ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ для всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; Ссли ΠΆΠ΅ связь внутрСнняя, Ρ‚ΠΎ свойство ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ распространяСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ трансляции.

Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² A10.2, Ссли ΠΏΠ΅Ρ€Π²ΠΎΠ΅ внСшнСС объявлСниС ΠΈΠΌΠ΅Π΅Ρ‚ спСцификатор static, Ρ‚ΠΎ ΠΎΠ½ΠΎ описываСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ связью, Ссли Ρ‚Π°ΠΊΠΎΠ³ΠΎ спСцификатора Π½Π΅Ρ‚, Ρ‚ΠΎ - с внСшнСй связью. Если объявлСниС находится Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΈ Π½Π΅ содСрТит extern, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½ΠΈ с Ρ‡Π΅ΠΌ Π½Π΅ связан ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ для Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если объявлСниС содСрТит extern ΠΈ Π±Π»ΠΎΠΊ находится ΠΊ области видимости внСшнСго объявлСния этого ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, Ρ‚ΠΎ послСдний ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ связь ΠΈ относится ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Однако Ссли Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ внСшнСго объявлСния для этого ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ внСшнюю связь.

A12. ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ выполняСт макроподстановку, ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ со Π·Π½Π°ΠΊΠ° # (ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ символы-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ), ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ связь с прСпроцСссором. Π˜Ρ… синтаксис Π½Π΅ зависит ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части языка; ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΈ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ влияниС (нСзависимо ΠΎΡ‚ области видимости) Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° транслируСмой Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ строк ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: каТдая строка анализируСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ (ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ "ΡΠΊΠ»Π΅ΠΈΠ²Π°Ρ‚ΡŒ" строки, см. A12.2). ЛСксСмами для прСпроцСссора ΡΠ²Π»ΡΡŽΡ‚ΡΡ всС лСксСмы языка ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ #include (A12.4). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, любой символ, Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом, воспринимаСтся ΠΊΠ°ΠΊ лСксСма. ВлияниС символов-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… табуляций, Π²Π½ΡƒΡ‚Ρ€ΠΈ строк прСпроцСссора Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.