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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 5

Автор Π˜Ρ€ΠΈΠ½Π° Козлова

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

15. ΠžΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая слуТит ΠΈΠΌΠ΅Π½Π΅ΠΌ внСшнСго массива

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€: объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i, которая слуТит ΠΈΠΌΠ΅Π½Π΅ΠΌ внСшнСго массива Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл, Π½Π° локальном ΡƒΡ€ΠΎΠ²Π½Π΅.

исходный Ρ„Π°ΠΉΠ» file1.c

main()

{…

}

fun1()

{extern long i[];…

}

/* исходный Ρ„Π°ΠΉΠ» file2.c */

long i[MAX] = {0};

fun2()

{…

}

fun3()

{…

}

ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i[] ΠΊΠ°ΠΊ extern Π² рассмотрСнном ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fun1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ находится Π² Ρ„Π°ΠΉΠ»Π΅ file2.c Π½Π° глобальном ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ СдинствСнным. ΠŸΡ€ΠΈ этом объявлСний с классом памяти extern ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ.

ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ со спСцификатором extern Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ компилятору ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ Π½ΡƒΠΆΠ½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ случаС объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° глобальном ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ спСцификатор класса памяти static ΠΈΠ»ΠΈ extern. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±Π΅Π· указания класса памяти. ΠšΠ»Π°ΡΡΡ‹ памяти auto ΠΈ register для глобального объявлСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ нСльзя.

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

1. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса памяти static. Данная пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° явно константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π»ΠΈΠ±ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ объявлСния static int i = 0 ΠΈ static int i ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹, ΠΈ Π² Ρ‚ΠΎΠΌ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Π±ΡƒΠ΄Π΅Ρ‚ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0.

2. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСна Π±Π΅Π· указания класса памяти, Π½ΠΎ с явной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Подобной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ присваиваСтся класс памяти static. Π’ΠΎ Π΅ΡΡ‚ΡŒ объявлСния int i = 1 ΠΈ static int i = 1 Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.

16. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΊ элСмСнтам массивов

Доступ ΠΊ элСмСнтам массива ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ двумя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ связан с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… индСксных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: array[18] = 3 ΠΈΠ»ΠΈ array[i + 3] = 9. ΠŸΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΌ способС доступа Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° выраТСния. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки. Одно ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ – Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ записи Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках слСдуСт Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ записи array[16] ΠΈ 16[array] Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ элСмСнт массива с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² индСксном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π½Π΅ всСгда являСтся константой, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ массив, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ пСрСмСнная. НапримСр, послС выполнСния присваивания ptr = array доступ ΠΊ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΎΠΌΡƒ элСмСнту массива ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, примСняя ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ptr Π² Ρ„ΠΎΡ€ΠΌΠ΅ ptr[16] ΠΈΠ»ΠΈ 16[ptr].

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ доступа ΠΊ элСмСнтам массива связан с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ адрСсных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π°-дрСсации Π² Π²ΠΈΠ΄Π΅ *(array+16) = 3 ΠΈΠ»ΠΈ *(array+i+2) = 7. ΠŸΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΌ способС доступа адрСсноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ соотвСтствуСт адрСсу ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΎΠ³ΠΎ элСмСнта массива, Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записано Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами: *(array+16) ΠΈΠ»ΠΈ *(16+array).

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ способ приводится ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ, Ρ‚. Π΅. индСксноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ становится адрСсным. Для Ρ€Π°Π½Π΅Π΅ рассмотрСнных ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² array[16] ΠΈ 16[array] ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² *(ar-ray+16).

Для доступа ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту массива, Ρ‚. Π΅. ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ индСксом, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ просто Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля array ΠΈΠ»ΠΈ ptr. Π›ΡŽΠ±ΠΎΠ΅ ΠΈΠ· присваиваний

*array = 2;

array[0] = 2; *(array+0) = 2; *ptr = 2;

ptr[0] = 2;

*(ptr+0) = 2;

присваиваСт Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту массива Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2, Π½ΠΎ быстрСС всСго выполнятся присваивания *array = 2 ΠΈ *ptr = 2, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½ΠΈΡ… Π½Π΅ трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слоТСния.

17. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора – это особыС инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ записаны Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° БИ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π΄ΠΎ трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Ρ€Π΅Π΄ΠΈ Ρ‚Π°ΠΊΠΈΡ… дСйствий – Π·Π°ΠΌΠ΅Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… лСксСм Π² тСкстС, вставка тСкста ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π·Π°ΠΏΡ€Π΅Ρ‚ Π½Π° Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ части тСкста ΠΈ Ρ‚. ΠΏ. ВсС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ со Π·Π½Π°ΠΊΠ° #. ПослС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ содСрТимоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСна Π² Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…:

#include «имя Ρ„Π°ΠΉΠ»Π°Β» #include <имя Ρ„Π°ΠΉΠ»Π°>

Имя Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ соглашСниям ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Оно ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя Ρ„Π°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ имя Ρ„Π°ΠΉΠ»Π° с ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π΅ΠΌΡƒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠΌ. Когда имя Ρ„Π°ΠΉΠ»Π° ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, Ρ‚ΠΎ поиск Ρ„Π°ΠΉΠ»Π° производится ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρƒ, Π° ΠΏΡ€ΠΈ Π΅Π³ΠΎ отсутствии – Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Когда имя Ρ„Π°ΠΉΠ»Π° Π·Π°Π΄Π°Π½ΠΎ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках, поиск Ρ„Π°ΠΉΠ»Π° осущСствляСтся Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… дирСкториях ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ PATH.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ, Ρ‚. Π΅. Π²ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include, способная Π·Π°ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ послС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»Π°, содСрТащСго эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include часто примСняСтся для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ поэтому Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° БИ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define примСняСтся для Π·Π°ΠΌΠ΅Π½Ρ‹ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ констант, ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ тСкстовыС ΠΈΠ»ΠΈ числовыС константы, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ константами. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ макроопрСдСлСниями, ΠΏΡ€ΠΈ этом макроопрСдСлСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записана Π² Π΄Π²ΡƒΡ… синтаксичСских Ρ„ΠΎΡ€ΠΌΠ°Ρ…:

#define ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ тСкст

#define ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) тСкст

Данная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° замСняСт всС дальнСйшиС вхоТдСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π½Π° тСкст. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ процСсс называСтся макроподстановкой. ВСкст ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° БИ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

18. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

#define WIDTH 80

#define LENGTH (WIDTH+10)

Π”Π°Π½Π½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ замСнят Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΆ Π΄ΠΎΠ΅ слово WIDTH Π½Π° число 80 ΠΈ любоС слово LENGTH Π½ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (80+10) вмСстС с ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΌΠΈ Π΅Π³ΠΎ скобками

Π‘ΠΊΠΎΠ±ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТатся Π² ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π΄ΠΎΡ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΠΉ, связан Π½Ρ‹Ρ… с порядком вычислСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссл1 Π² скобках Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ t = LENGTH*7 Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π° Π½ΠΎ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ t = 80 + 10*7, Π° Π½Π΅ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ t = (80 – + 10)*7, ΠΊΠ°ΠΊ это получаСтся, Ссли Π΅ΡΡ‚ΡŒ скобки, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒ Ρ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ 780, Π° Π½Π΅ 630.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ синтаксичСской Ρ„ΠΎΡ€ΠΌΠ΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ #define присутствуСт список Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ° Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ запятыми. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π° ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² тСкстС макроопрСдСлСния ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ подставлСны фактичСскиС Π°Ρ€ Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ°ΠΊΡ€ΠΎΠ²Ρ‹Π·ΠΎΠ²Π°. Π›ΡŽΠ±ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ способСн ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² тСкстС макроопрСдСлСния нСсколь ΠΊΠΎ Ρ€Π°Π·.

ΠŸΡ€ΠΈ ΠΌΠ°ΠΊΡ€ΠΎΠ²Ρ‹Π·ΠΎΠ²Π΅ Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ слСдуСт спи сок фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², количСство ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слС Π΄ΡƒΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌ с количСством Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

#define MAX(x,y) ((x) > (y))?(x): (y)

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ t = = MAX(i,s[i]) Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ t = ((i) > (s[i])?(i): (s[i]).

Как ΠΈ Π² Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ макроопрСдСлСния, Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок, связанных с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ порядком осущСствлСния, Ссли фактичСскиС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ выраТСниями.

НапримСр, Ссли Π΅ΡΡ‚ΡŒ скобки, Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚

t = MAX(i&j, s[i]||j) Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ

t = ((i&j) > (s[i]||j)?(i&j): (s[i]||j); Π° Π΅ΡΠ»ΠΈ скобок Π½Π΅Ρ‚ – Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ

t = (i&j>s[i]||j)?i&j: s[i]||j;

Π³Π΄Π΅ условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ вычисляСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ порядкС.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #undef примСняСтся для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ дСйствия Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define. Бинтаксис Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ: #undef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° отмСняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ опрСдСлСния #define для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.

19. Π Π΅ΠΊΡƒΡ€ΡΠΈΡ

Ѐункция являСтся рСкурсивной, ΠΊΠΎΠ³Π΄Π° Π²ΠΎ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ появляСтся Π΅Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² нСпосрСдствСнно ΠΈΠ»ΠΈ косвСнно, Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠŸΡ€ΡΠΌΠ°Ρ (нСпосрСдствСнная) рСкурсия – это Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

int a()

{…..a()…..}

КосвСнная рСкурсия – это рСкурсия, которая осущСствляСт рСкурсивный Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π²Ρ‹Π·ΠΎΠ²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ входят Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ, Ρ‚ΠΎΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ рСкурсивными. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€: