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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Освой ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π‘++ Π·Π° 21 дСнь.Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 144

Автор ДТСсс Π›ΠΈΠ±Π΅Ρ€Ρ‚ΠΈ

Π—Π°Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹? НС ΠΏΡ€ΠΎΡ‰Π΅ Π»ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ устранСния ошибки?

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ Π² использовании, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ. Π‘ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ конструктор ΠΈ дСструктор класса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ функциями устранСния возникшСй ошибки.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для отслСТивания ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций, Π½ΠΎ ΠΈ для выполнСния Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… процСссов? Π Π°Π·Π²Π΅ Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для быстрого ΠΈ бСзопасного возвращСния ΠΏΠΎ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΊ исходному ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

БСзусловно, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты Π½Π° C++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этих цСлях. Но слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ стСку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΡƒΠΆ бСзопасным. Π’Π°ΠΊ, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹Π» создан Π² области динамичСского ΠΎΠ±ΠΌΠ΅Π½Π°, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½ Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ памяти. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΏΡ€ΠΈ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ использовании соврСмСнного компилятора эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ использованиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ ΠΏΠΎ прямому Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ слишком Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ ΠΈ Π½Π΅Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ.

ВсСгда Π»ΠΈ слСдуСт ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сразу Π·Π° Π±Π»ΠΎΠΊΠΎΠΌ try, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅?

НСт, Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π² любом мСстС, послС Ρ‡Π΅Π³ΠΎ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½ Ρ‚ΠΎ Ρ‚ΠΎΠ³ΠΎ мСста, Π³Π΄Π΅ происходит ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Ссли Ρ‚Π΅ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ прямо Π²ΠΎ врСмя компиляции с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° cout ΠΈ условного выраТСния #ifdef debug?

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ прСдоставляСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС срСдств ΠΈ возмоТностСй, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ пошаговоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, установка Ρ‚ΠΎΡ‡Π΅ΠΊ останова ΠΈ Π°Π½Π°Π»ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ этом Π²Π°ΠΌ Π½Π΅ приходится ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ многочислСнными ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ прСпроцСссора ΠΈ выраТСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связаны с основным Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠšΠΎΠ»Π»ΠΎΠΊΠ²ΠΈΡƒΠΌ

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ вопросы для самоконтроля ΠΈ укрСплСния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ряд ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ваши практичСскиС Π½Π°Π²Ρ‹ΠΊΠΈ. ΠŸΠΎΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопросы тСста ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ задания, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ с ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π“. НС приступайтС ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Ρ‹, Ссли для вас ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ нСясными хотя Π±Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ вопросов.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅?

2. Π”ля Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Π±Π»ΠΎΠΊ try?

3. Π”ля Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ catch?

4. ΠšΠ°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅?

5. ΠšΠΎΠ³Π΄Π° создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

6. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ значСния ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ссылки?

7. Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ catch ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ссли ΠΎΠ½ настроСн Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

8. Π•сли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° catch, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… настроСн Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠ΅ сообщСниС, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅, Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС ΠΈΡ… слСдуСт Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ?

9. Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ catch(...)?

10. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΡ‡ΠΊΠ° останова?

УпраТнСния

1. Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π±Π»ΠΎΠΊ try ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ catch для отслСТивания ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ простого ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π² ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ 1, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-Ρ‡Π»Π΅Π½ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… Π² Π±Π»ΠΎΠΊΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° catch.

3. Π£Π½Π°ΡΠ»Π΅Π΄ΡƒΠΉΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ 2. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° catch Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½Π΅ΠΌ происходила ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊ ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

4. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ упраТнСния 3, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

5. Π–ΡƒΡ‡ΠΊΠΈ: Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅?

#include "string" //класс строк

сlass xOutOfMemory

{

   public:

      xOutOfMemory(){ theMsg = new сhar[20];

         strcpy(theMsg, "trror in momory");}

      ~xOutOfMemory(){ delete [] theMsg;

         cout << "Memory restored, " << endl; }

      char * Message() { return theMsg; }

   private:

      char >> theMsg;

};

main()

{

   try

   {

      char * var = new char;

      if ( var == 0 )

      {

         xOutOfMemory * px = new xOutOfMemory;

         throw px;

      }

   }

   catch( xOutOfMemory * theException )

   {

      cout << theException->Message() <<endl;

      delete theException;

   }

   return 0;

}


6. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ содСрТит ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΏΠΎΠΊΠ°Π·Π° сообщСния ΠΎΠ± ошибкС Π² случаС обнаруТСния Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ свободной памяти. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² строку if (var == 0) Π½Π° if (1), которая Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ созданиС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π”Π΅Π½ΡŒ 21-ΠΉ. Π§Ρ‚ΠΎ дальшС

ΠŸΡ€ΠΈΠΌΠΈΡ‚Π΅ наши поздравлСния! Π’Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Ρ…Π½Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ интСнсивного курса ввСдСния Π² C++. К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Ρƒ вас Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ясноС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ языка C++, Π½ΠΎ Π² соврСмСнном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ всСгда найдутся Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ области. Π’ этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ подробности, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΌΠ΅Ρ‡Π΅Π½ курс для дальнСйшСго освоСния C++.

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Ρ„Π°ΠΉΠ»ΠΎΠ² источника прСдставлСна ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π½Π° языкС C++. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ этот ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° машинном языкС. Однако ΠΏΠ΅Ρ€Π΅Π΄ запуском компилятора запускаСтся прСпроцСссор, благодаря Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ возмоТностями условной компиляции. Π˜Ρ‚Π°ΠΊ, сСгодня Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:

β€’ Π§Ρ‚ΠΎ прСдставляСт собой условная компиляция ΠΈ ΠΊΠ°ΠΊ с Π½Π΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ

β€’ ΠšΠ°ΠΊ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ макросы прСпроцСссора

β€’ ΠšΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСпроцСссор для обнаруТСния ошибок

β€’ ΠšΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ значСниями ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² качСствС Ρ„Π»Π°Π³ΠΎΠ²

β€’ ΠšΠ°ΠΊΠΈΠ΅ шаги слСдуСт ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ для дальнСйшСго эффСктивного изучСния C++

ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠΈ компилятор

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π½Π΅ исходный Ρ„Π°ΠΉΠ» источника, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСпроцСссора ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² исполняСмый Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΌ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ прСпроцСссора #include: ΠΎΠ½Π° прСдписываСт Π½Π°ΠΉΡ‚ΠΈ Ρ„Π°ΠΉΠ», имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π·Π° Π½Π΅ΠΉ, ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ тСкст этого Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ мСсту Π²Ρ‹Π·ΠΎΠ²Π°. Π­Ρ‚ΠΎΡ‚ эффСкт ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ: Π²Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» прямо Π² свою ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΊ Ρ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° компилятор ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ исходный ΠΊΠΎΠ΄, Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ Π½Π° мСстС.

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

ΠŸΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ компилятор ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΊΠ»ΡŽΡ‡Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ компилятору ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Если вас Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ интСрСсуСт содСрТимоС этого Ρ„Π°ΠΉΠ»Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ руководству ΠΏΠΎ использованию компилятора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ для Π½Π΅Π³ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ.

ИспользованиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define

Команда #define опрСдСляСт строку подстановки. Π‘Ρ‚Ρ€ΠΎΠΊΠ°

#define BIG 512

ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ прСдписываСтС прСпроцСссору Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ лСксСму BIG строкой 512 Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚Π° запись Π½Π΅ являСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ языка C++. Π‘Ρ‚Ρ€ΠΎΠΊΠ° 512 Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ встрСчаСтся лСксСма BIG. ЛСксСма β€” это строка символов, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ любая строка, константа ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ€ символов. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ записи строк

#define BIG 512 int myArray[BIG];

ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», создаваСмый прСпроцСссором, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄:

int myArray[512];

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ исчСзла ΠΊΠΎΠΌΠ°Π½Π΄Π° #define. Из ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° всС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, поэтому ΠΎΠ½ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° источника.

ИспользованиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define для создания констант

Один Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define - это созданиС констант. Однако этим Π½Π΅ стоит Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define просто выполняСт Π·Π°ΠΌΠ΅Π½Ρƒ строки ΠΈ Π½Π΅ осущСствляСт Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ контроля Π·Π° соотвСтствиСм Ρ‚ΠΈΠΏΠΎΠ². Как пояснялось Π½Π° занятии, посвящСнном константам, Π³ΠΎΡ€Π°Π·Π΄ΠΎ бСзопаснСС вмСсто Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово const.

ИспользованиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define для тСстирования

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ использования Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define состоит Π² простом объявлСнии Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ данная лСксСма ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: