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

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

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

НапримСр:

int x; // глобальноС x

f() {

int x; // локальноС x прячСт глобальноС x x = 1; // ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ x

{

int x; // прячСт ΠΏΠ΅Ρ€Π²ΠΎΠ΅ локальноС x

x = 2; // ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ x

}

x = 3; // ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ x

}

int* p = &x // Π²Π·ΡΡ‚ΡŒ адрСс глобального x

Π‘ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ написании Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Но Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ имя скрыто, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ вслСдствиС этого, ΠΎΡ‡Π΅Π½ΡŒ тяТСло ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Π² основном ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π΅Π΄ΠΊΠΈΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ для Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ i ΠΈΠ»ΠΈ x Π½Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π½Π° нСприятности. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ области видимости:: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ скрытоС глобальноС имя. НапримСр: int x;

f()

{

int x = 1; // скрываСт глобальноС x::x = 2; // присваиваСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ x

}

Однако возмоТности ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ скрытоС локальноС имя Π½Π΅Ρ‚. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠΌΠ΅Π½ΠΈ начинаСтся Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ описания. Π’ΠΎ Π΅ΡΡ‚ΡŒ имя ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ для задания Π΅Π³ΠΎ собствСнного значСния. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

int x;

f() {

int x = x; // ΠΈΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅

}

30. Π˜ΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Имя (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ² ΠΈ Ρ†ΠΈΡ„Ρ€. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π±ΡƒΠΊΠ²ΠΎΠΉ. Π—Π½Π°ΠΊ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ° считаСтся Π±ΡƒΠΊΠ²ΠΎΠΉ. C++ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ число символов Π² ΠΈΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ части Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ находятся Π²Π½Π΅ вСдСния Π°Π²Ρ‚ΠΎΡ€Π° компилятора (Π² частности, Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ), ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ограничСния Π½Π°Π»Π°Π³Π°ΡŽΡ‚.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹:

012 a fool $sys class 3var pay.due foo~bar.name if

Π‘ΡƒΠΊΠ²Ρ‹ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрах ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, Ρ‚. Π΅. Count ΠΈ count – Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π°, ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ИмСна, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ°, ΠΏΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… срСдств срСды выполнСния, поэтому ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π΅ стоит.

КаТдоС имя (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) Π² C++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ассоциированным с Π½ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π¦Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ char ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ всСго ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для хранСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ символов Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅; ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Π±Π°ΠΉΡ‚. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² C++ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π° char, Ρ‚. Π΅. ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ sizeof(char)==1.

Π’ΠΈΠΏ unsigned char являСтся Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ, ΠΈ ΠΏΡ€ΠΈ Π΅Π³ΠΎ использовании ΠΈΠΌΠ΅Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ пСрСносимыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ вмСсто char ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π² эффСктивности.

Π’ΠΈΠΏ void (пустой) синтаксичСски проявляСт сСбя ΠΊΠ°ΠΊ основной Ρ‚ΠΈΠΏ. Но ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ слСдуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° void Π½Π΅Ρ‚. Он примСняСтся для указания, Ρ‡Ρ‚ΠΎ функция Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ нСизвСстного Ρ‚ΠΈΠΏΠ°.

void f() // f Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

void* pv; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСизвСстного Ρ‚ΠΈΠΏΠ°

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ‚ΠΈΠΏΠΎΠ² T T* слуТит Ρ‚ΠΈΠΏΠΎΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° T. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° T* ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° T. Для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ слоТной записью:

int* pi;

int* pi;

char** cpp; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° char

int (*vp)[10]; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· 10 int’ов

int (*fp)(char, char*); // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

// ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (char, char*)

// ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ int

31. Π Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅

Основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π½Π°Π΄ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ являСтся Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚. Π΅. ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π­Ρ‚Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ косвСнным ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ. НапримСр:

char c1 = 'a';

char* p = &c1 // Π² p хранится адрСс c1 char c2 = *p; // c2 = 'a'

Над указатСлями ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ арифмСтичСскиС дСйствия. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, функция, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ число символов Π² строкС (Π½Π΅ считая Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ 0):

int strlen(char* p) {

int i = 0;

while (*p++) i++; return i;

}

Π”Π²Π° структурных Ρ‚ΠΈΠΏΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

struct s1 {int a;};

struct s2 {int a;};

ΡΠ²Π»ΡΡŽΡ‚ΡΡ двумя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, поэтому

s1 x;

s2 y = x; // ошибка: нСсоотвСтствиС Ρ‚ΠΈΠΏΠΎΠ².

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚ основных Ρ‚ΠΈΠΏΠΎΠ², поэтому

s1 x;

int i = x; // ошибка: нСсоотвСтствиС Ρ‚ΠΈΠΏΠΎΠ²

Но сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ описания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ для Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ввСдСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ОписаниС с прСфиксом typedef Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½Π΅ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π° Π½ΠΎΠ²ΠΎΠ΅ имя этого Ρ‚ΠΈΠΏΠ°. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

typedef char* Pchar; Pchar p1,p2; char* p3 = p1;

32. Π‘сылка

Бсылка – это Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ссылок Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² спСцификации ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для Ρ‚ΠΈΠΏΠΎΠ², опрСдСляС-ΠΌΡ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π°ΠΏΠΈΡΡŒ x& прСдставляСт собой ссылку Π½Π° x.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

int i = 1;

int& r = i; // r ΠΈ i Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ int int x = r // x = 1 r = 2; // i = 2;

БсылкС слСдуСт Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ.

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

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

register int i; register point cursor; register char* p;

ОписаниС register ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ½Π°. C++ позволяСт Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ значСния основных Ρ‚ΠΈΠΏΠΎΠ²: ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½32Π± стант, Ρ†Π΅Π»Ρ‹Ρ… констант ΠΈ констант с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Π’Π°ΠΊΠΆΠ΅ ноль (0) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ константа любого ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ строки слуТат константами Ρ‚ΠΈΠΏΠ° char[]. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ символичСскиС константы. БимволичСская константа прСдставляСт собой имя, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Π΅Π³ΠΎ области видимости. Π’ C++ сущСствуСт Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° символичСских констант:

1) Π»ΡŽΠ±ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ любого Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ имя ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ константу, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΊ Π΅Π³ΠΎ описанию ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово const;

2) ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Ρ†Π΅Π»Ρ‹Ρ… констант ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ ΠΊΠ°ΠΊ пСрСчислСниС;

3) Π»ΡŽΠ±ΠΎΠ΅ имя Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся константой.

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ большС пространства памяти, Ρ‡Π΅ΠΌ имССтся ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½ΠΎ. БущСствуСт Π΄Π²Π° способа ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ побольшС пространства ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ доступно:

1) ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ нСбольшого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;

2) ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ пространства для хранСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ примСнСния ΠΏΠΎΠ»Π΅ΠΉ, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ – объСдинСний.

33. Π’ыраТСния ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

C++ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ нСбольшим, Π½ΠΎ Π³ΠΈΠ±ΠΊΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² для контроля ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ строк. КаТдая строка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятой. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ элСмСнтами выраТСния слуТат числа, ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ *, /, +, β€“ (ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ) ΠΈ =. ИмСна Π½Π΅ всСгда ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΎ использования.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ имСнуСтся рСкурсивным спуском; это популярный ΠΈ простой нисходящий ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ Ρ‚Π°ΠΊΠΎΠΌ языкС, ΠΊΠ°ΠΊ C++, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΏΠΎΠ»Π½Π΅ Π΄Π΅ΡˆΠ΅Π²Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ эффСктивСн. Для любого ΠΏΡ€Π°Π²ΠΈΠ»Π° Π²Ρ‹Π²ΠΎΠ΄Π° Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ сущСствуСт функция, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ символы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, END, NUMBER, + ΠΈ β€”) ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ лСксичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ gettoken(), Π° Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ символы ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ функциями синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° expr(), term() ΠΈ prim().

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π·Π±ΠΎΡ€Π° для обнаруТСния Π²Π²ΠΎΠ΄Π° примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gettoken(). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° gettoken() опрСдСляСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ currtok; currtok ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ пСрСчислСния tokenvalue.

Π’ любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π° прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ gettoken() ΠΈ Π² currtok располагаСтся ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ символ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Ρƒ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π°Π·Π±ΠΎΡ€Π° Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ лСксичСский символ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ€Π°Π·Π±ΠΎΡ€Π° Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½Ρƒ лСксСму большС, Ρ‡Π΅ΠΌ примСняСтся ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π°. КаТдая функция Ρ€Π°Π·Π±ΠΎΡ€Π° опрСдСляСт «своС» Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Ѐункция expr() ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ слоТСниС ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅; ΠΎΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя простой Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΡ‹ для слоТСния ΠΈΠ»ΠΈ вычитания.

Π‘Π°ΠΌΠ° функция Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ°Π»ΠΎ. Π’ ΠΌΠ°Π½Π΅Ρ€Π΅, которая Ρ‚ΠΈΠΏΠΈΡ‡Π½Π° для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ высокого уровня Π² Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΎΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ для осущСствлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π‘++ Π½Π΅ составляСт большого Ρ‚Ρ€ΡƒΠ΄Π°. Ѐункция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок просто опрСдСляСт ошибки, ΠΏΠΈΡˆΠ΅Ρ‚ сообщСниС ΠΎΠ± ошибкС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ производится ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ошибки Ρ‡Π°Ρ‰Π΅ всСго Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² сСрСдинС вычислСния выраТСния, ΠΈ поэтому слСдуСт ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ вычислСниС, ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ привСсти ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ошибкам. Для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° большС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ послСднСС. Если Π±Ρ‹ gettoken() ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π»Π° Π½ΠΎΠΌΠ΅Ρ€Π° строк, Ρ‚ΠΎ error() сообщала Π±Ρ‹, Π³Π΄Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° ошибка. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π±Ρ‹ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ примСнялся Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ.