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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 21

Автор ΠœΡŽΡ€Ρ€Π΅ΠΉ Π₯ΠΈΠ»Π»

3. НСбольшоС число ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² Ρ‚Π΅Ρ… мСстах, Π³Π΄Π΅ ΠΏΡ€ΠΎΡ€Π°ΠΌΠΌΠ° Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π° ΠΈ/ΠΈΠ»ΠΈ нСпСрСносима ΠΈ

4. ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅.


НапримСр:

// tbl.c: РСализация Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅Π½ /* ГауссовскоС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с частичным Π‘ΠΌ. Ralston: Β«A first course ...Β» стр. 411. */

// swap() ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ стСка AT amp;T sB20.

/**************************************

Copyright (c) 1984 AT amp;T, Inc. All rights reserved

****************************************/

Π£Π΄Π°Ρ‡Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ написанныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ – сщСствСнная Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НаписаниС Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ слоТным, сколь ΠΈ написаниС самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΡ‹.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Ссли Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ //, Ρ‚ΠΎ Π»ΡŽΠ±ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² /* */, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

3.5 УпраТнСния

1. (*1) ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for Π² Π²ΠΈΠ΄Π΅ эквивалСнтного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° while: for (i=0; iΒ«max_length; i++) if (input_line[i] == '?') quest_count++;

2. (*1) ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΡΡ‚Π°Π²ΡŒΡ‚Π΅ скобки Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… выраТниях: a = b + c * d «« 2 amp; 8 a amp; 077 != 3 a == b !! a == c amp; amp; c Β« 5 c = x != 0 0 Β«= i Β« 7 f(1,2)+3 a = -1 + + b – – 5 a = b == c ++ a = b = c = 0 a[4][2] *= * b ? c : * d * 2 a-b,c=d

3. (*2) НайдитС ΠΏΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… конструкций Π‘++, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.

4. (*2) НайдитС Π΄Π΅ΡΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² нСпСрСносимой Π‘++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

5. (*1) Π§Ρ‚ΠΎ происходит Π² вашСй систСмС, Ссли Π²Ρ‹ Π΄Π΅Π»ΠΈΡ‚Π΅ Π½Π° ноль? Π§Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ значимости?

6. (*1) ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΡΡ‚Π°Π²ΡŒΡ‚Π΅ скобки Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… выраТниях: *p++ *–p ++a– (int*)p-Β»m *p.m *a[i]

7. (*2) ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: strlen(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ строки, strcpy(), которая ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½Ρƒ строку Π² Π΄Ρ€Π³ΡƒΡŽ, ΠΈ strcmp(), которая сравниваСт Π΄Π²Π΅ строки. Π Π°Π·Π±Π΅Ρ€ΠΈΡ‚Π΅ΡΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ‚ΠΈΠΏΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π½ΠΈΠΉ, Π° ΠΏΠΎΡ‚ΠΎΠΌ сравнитС ΠΈΡ… со стандартными вСрсиями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ описаны Π² Β«string.hΒ» ΠΈ Π² вашСм руководствС.

8. (*1) ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ваш компилятор Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ошибки: a := b+1; if (a = 3) // ... if (a amp;077 == 0) // ΠŸΡ€ΠΈΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ошибки ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅, ΠΈ посмотритС, ΠΊΠ°ΠΊ компилятор Π½Π° Π½ΠΈΡ… Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚.

9. (*2) ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ cat(), ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΡƒΡŽ Π΄Π²Π° строковых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ строку, которая являСтся ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Ρ†ΠΈΠ΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ new, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ для Ρ€Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ rev(), которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ строку ΠΈ пСрСставляСт Π² Π½Π΅ΠΉ символы Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. Π’ΠΎ Π΅ΡΡ‚ΡŒ, послС Π²Ρ‹Π·ΠΎΠ²Π° rev(p) послСдний символ p становится ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.

10. (*2) Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°?

void send(register* to, register* from, register count) // ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ нСсомнСнно ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Ρ‹. (* register n=(count+7)/8; switch (count%8) (* case 0: do (* *to++ = *from++; case 7: do (* *to++ = *from++; case 6: do (* *to++ = *from++; case 5: do (* *to++ = *from++; case 4: do (* *to++ = *from++; case 3: do (* *to++ = *from++; case 2: do (* *to++ = *from++; case 1: do (* *to++ = *from++; while (–nΒ»0); *) *) Π—Π°Ρ‡Π΅ΠΌ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠ³ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅?

11. (*2) ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ atoi(), которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ стрку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Ρ†ΠΈΡ„Ρ€Ρ‹, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ int. НаримСр, atoi(Β«123Β») – это 123. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ atoi() Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ дСсятичной ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π° Π΅Ρ‰Π΅ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΡƒΡŽ ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈΡ€ΠΈΡ‡Π½ΡƒΡŽ записи Π‘++. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ atoi() Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запись символьной константы. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ itoa(), которая строит прСдставлСниС Ρ†Π΅Π»ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Π²ΠΈΠ΄Π΅ строки.

12. (*2) ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ get_token() (#3.1.2), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Ρ‡ΠΈΡ‚Π°Π»Π° строку Π² Π±ΡƒΡ„Π΅Ρ€, Π° Π·Π°Ρ‚Π΅ΠΌ составляла лСксСмы, читая символы ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°.

13. (*2) Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ ΠΈΠ· #3.1 Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ sqrt(), log() ΠΈ sin(). Подсказка: ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

14. (*3) Π”Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½Ρ†ΠΈΠΈ Π² Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½ΠΎΠΌ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π΅. Подсказка: опрСдСляйтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий, прямо Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΈΡ… Π½Π°Π±Ρ€Π°Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ. Π’Π°ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ строку, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ список лСксСм. ПослС этого, ΠΊΠΎΠ³Π΄Π° функция вызываСтся, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΈ выполняйтС эти дСйствия. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π»Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ записи этого.

15. (*1.5) ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Ρ‚Π°ΠΊ, Ρ‡Ρ‚Π±Ρ‹ вмСсто статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… name_string ΠΈ number_value использовалась структура символа symbol: struct symbol (* token_value tok; union (* double number_value; char* name_string; *); *);

16. (*2.5) ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая выбрасываСт ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΠ· Π‘++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· cin, удаляСт // ΠΈ /* */ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ ΠΏΠΈΡˆΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² cout. НС Π·Π°Π±ΠΎΡ‚ΡŒΡ‚Π΅ΡΡŒ ΠΎ приятном Π²ΠΈΠ΄Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСкста (это ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Π±Π»Π΅Π΅ слоТным ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ΠΌ). НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠžΡΡ‚Π΅Ρ€Π΅Π³Π°ΠΉΡ‚Π΅ΡΡŒ // ΠΈ /* ΠΈ */ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², строк ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… констант.

17. (*2) ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… стилСй коммСнтирования ΠΈ выравнивания, ΠΊΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π“Π»Π°Π²Π° 4 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π€Π°ΠΉΠ»Ρ‹

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ свойствСнна Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ, рСкурсия боТСствСнна.

Π›. ΠŸΠΈΡ‚Π΅Ρ€ Π”ΠΎΠΉΡ‡

ВсС Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† (ΠΈΡ… принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ просто Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ). Π’ этой Π³Π»Π°Π²Π΅ описано, ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ совмСстно ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅), ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Бюда входят ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΡ‡Π°Π½ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠΌΠ΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, описаниС ΠΈ ΠΎΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ макросы.

4.1 Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ΠΎΠΌ. Он Π±Ρ‹Π» прСдставлСн Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π°. Если Π²Ρ‹ Π΅Π³ΠΎ Π½Π°Π±ΠΈΠ»ΠΈ, Ρ‚ΠΎ Ρƒ вас нвСрняка Π±Ρ‹Π»ΠΈ нСбольшиС трудности с располоТСниСм описаний Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС, ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄Π½ΠΎ Β«Ρ„Π°Π»ΡŒΡˆΠΈΠ²ΠΎΠ΅Β» описаниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор смог ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½ΠΎ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ expr(), term() ΠΈ prim(). Π’ тСкстС ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… частСй (лСсичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π°, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅Π½ ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°), Π½ΠΎ это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² тСкстС самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. По сути Π΄Π΅Π»Π°, ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ Π±Ρ‹Π» написан ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π’Π°ΠΊ это Π½Π΅ дСлаСтся; Π΄Π°ΠΆΠ΅ Ссли Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Β«Π½Π° выброс» ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ всСми сообраТСниями ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ прораммирования, эксплуатации ΠΈ эффСктивности компиляции, Π°Π²Ρ‚ΠΎΡ€ всС Ρ€Π°Π²Π½ΠΎ Ρ€Π°Π·ΠΎΠ±ΡŒΠ΅Ρ‚ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² 200 строк Π½Π° нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Ρ‹Π»ΠΎ приятнСС.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, состоящая ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ согласованной Π² смыслС использования ΠΈΠΌΠ΅Π½ ΠΈ Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, состоящая ΠΈΠ· ΠΎΠ½ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π°. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈ ΠΊΠΎΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ*. ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ – это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΡΡ‚Ρ‹ΠΊΡƒΡŽΡ‰Π°Ρ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ скомпилированныС части вмСстС. ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ часто (путая) Π½Π·Ρ‹Π²Π°ΡŽΡ‚ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ. Π’ UNIX'Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ называСтся ld. Однко ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ систСм, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΡΠ»Π°Π±ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ согласованности.

– * ΠΈΠ»ΠΈ Π»ΠΈΠ½ΠΊΠ΅Ρ€. (ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².)

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСдостаток ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ со стороны ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, прСдоставив Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΡ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… (описания). ПослС этого ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ обСспСчиваСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ согласованности описаний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅

находятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… частях. БрСдства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ это ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚, Π² вашСй систСмС Π±ΡƒΠ΄ΡƒΡ‚. Π‘++ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ явной ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅*.

– * C Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΏΠΎΠ·Π²Π»ΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π½Π΅ΡΠ²Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ C, ΠΎΠ΄Π½Π°ΠΊΠΎ, возросло Π½Π΅ΠΈΠΌΠΎΠ²Π΅Ρ€Π½ΠΎ, поэтому случаи, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΡΠ²Π½ΡƒΡŽ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΡƒ, сСйчас ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ΅Π½ΡŒΡˆΠΈΠ½Ρ‚Π²ΠΎ. (ΠΏΡ€ΠΈΠΌ. Π°Π²Ρ‚ΠΎΡ€Π°)

4.2 Компоновка

Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½ΠΎΠ΅, Ρ‚ΠΎ имя, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ класса, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΌΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ‚ΠΈΠΏΡƒ, Π·Π½Ρ‡Π΅Π½ΠΈΡŽ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π½Π΅Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, функция ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с этим ΠΈΠΌΠ΅Π½Π΅ΠΌ. Рассмотрим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π²Π° Ρ„Π°ΠΉΠ»Π°:

// file1.c: int a = 1; int f() (* /* Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ */ *)

// file2.c: extern int a; int f(); void g() (* a = f(); *)

a ΠΈ f(), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ g() Π² Ρ„Π°ΠΉΠ»Π΅ file2.c,– Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ file1.c. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extern (внСшнСС) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ описаниС a Π² file2.c являСтся (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) описниСм, Π° Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. Если Π±Ρ‹ a ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ, extern Π±Ρ‹Π»ΠΎ Π±Ρ‹ просто ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ описаниС с ΠΈΠ½ΠΈΡ†ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ всСгда являСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. ΠžΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·, Π½ΠΎ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ. НапримСр: