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

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

Автор Бтраустрап Π‘ΡŒΡΡ€Π½

;

ΠŸΡƒΡΡ‚ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для помСщСния ΠΌΠ΅Ρ‚ΠΊΠΈ нСпорСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ *) составного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½Π°Π±Π΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ while, пустым Ρ‚Π΅Π»ΠΎΠΌ.

9.14 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ описаниС

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ описаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ввСдСния Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π² Π±Π»ΠΎΠΊΠ΅; ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€_описаниС: описаниС

Если Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ описаниСм ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Ρ‹Π» описан Ρ€Π°Π½Π΅Π΅ Π²ΠΎ внСшнСм Π±Π»ΠΎΠΊΠ΅, внСшнСС описаниС становится скрытым Π½Π° пртяТСнии Π±Π»ΠΎΠΊΠ°, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΎ вновь всупаСт Π² силу.

КаТдая инициализация auto ΠΈ register ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… произвдится ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€_описаниС. МоТно ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠΊ, Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, ΠΊΠΎΡ‚Ρ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, см. #9.11. Π˜Π½ΠΈΡ†ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… класса памяти static (#4.4) производятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ.

10. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ описаний. Код (тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½Π΅ всСх Π±Π»ΠΎΠΊΠΎΠ² ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ описаний классов. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄

ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: спСцификаторы_описания opt ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€_Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ opt Ρ‚Π΅Π»ΠΎ_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹_описания register, auto, typedef Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ описания класса (#8.5), Π° friend ΠΈ virtual ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΌ. ΠžΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – это ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ Β«Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ ...Β» (#8.4).Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ находятся Π² области видимости самого внСшнСго Π±Π»ΠΎΠΊΠ° Ρ‚Π΅Π»Π°_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠΏΠΈΡΠ°Ρ‚Π΅Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄

ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ( список_описаний_ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² )

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ спСцифицирован ΠΊΠ°ΠΊ register, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚Ρ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ возмоТности копироватся Π² рСгистр Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Если для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° спСцифцировано константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² качСствС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Ρ‚ΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π½ΠΈΡŽ.

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄

Ρ‚Π΅Π»ΠΎ_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: составной_ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

int max(int a, int b, int c) (* int m = (a Β« b) ? a : b; return (m Β» c) ? m : c; *)

Π—Π΄Π΅ΡΡŒ int – это спСцификатор_Ρ‚ΠΈΠΏΠ°; max(int a, int b, int c) – это ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; (* ... *) – это Ρ‚Π΅Π»ΠΎ_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² контСкстС выраТСния имя моссива (Π² особСности, ΠΊΠ°ΠΊ фактичСского ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°) принимаСтся ΠΊΠ°ΠΊ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива, описания Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ описаны ΠΊΠ°ΠΊ «массив ΠΈΠ· ...Β», ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡ΠΈΡ‚Π°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊ Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ...Β».

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ конструктора ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Ρ‚ΠΎΡ€Ρ‹ для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈ для Ρ‡Π»Π΅Π½ΠΎΠ². Π­Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса, констант ΠΈ ссылок, Π³Π΄Π΅ сСмантика ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ присваивания Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€_Π±Π°Π·Π²ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄

ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€_Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ: : список_ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²_Ρ‡Π»Π΅Π½ΠΎΠ²

список_ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²_Ρ‡Π»Π΅Π½ΠΎΠ²: ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€_Ρ‡Π»Π΅Π½Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€_Ρ‡Π»Π΅Π½Π° , список_ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²_Ρ‡Π»Π΅Π½ΠΎΠ²

ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€_Ρ‡Π»Π΅Π½Π°: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ opt ( список_ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² opt )

Если Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅_Ρ‡Π»Π΅Π½Π° Π΄Π°Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚ΠΎ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π°; Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. НапримСр:

struct base (* base(int); ... *);

struct derived : base (* derived(int); base b; const c;

*);

derived::derived(int a) : (a+1), b(a+2), c(a+3) (* /* ... */ *)

derived d(10);

Π‘Π½Π°Ρ‡Π°Π»Π° конструктор Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса вызываСтся для ΠΎΠ±Π΅ΠΊΡ‚Π° d с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ 11, Π·Π°Ρ‚Π΅ΠΌ вызываСтся конструктор для Ρ‡Π»Π½Π° b с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ 12 ΠΈ конструктор для Ρ‡Π»Π΅Π½Π° c с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ 13. Π—Π°Ρ‚Π΅ΠΌ выполняСтся Ρ‚Π΅Π»ΠΎ derived::derived() (см. #8.5.5). ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ конструкторы для Ρ‡Π»Π΅Π½ΠΎΠ², Π½Π΅ ΡƒΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½. Если Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΈΠΌΠ΅Π΅Ρ‚ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π΅ Π½Π°Π΄ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ список ΠΏΠ°Ρ€ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Если класс Ρ‡Π»Π΅Π½Π° ΠΈΠΌΠ΅Π΅Ρ‚ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², для этого Ρ‡Π»Π΅Π½Π° Π½Π΅ Π½Π°Π΄ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

11. ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ строки компилятора

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

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ опрСдСлСния const ΠΈ inline Π΄Π°ΡŽΡ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° использований #define.

11.1 Π—Π°ΠΌΠ΅Π½Π° лСксСм

Командная строка компилятора Π²ΠΈΠ΄Π°

#define ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ строка_лСксСм Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ прСпроцСссором ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ строкой символов. Π’ΠΎΡ‡ΠΊΠ° с запятой Π²Π½ΡƒΡ‚Ρ€ΠΈ (ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅) строки символов являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ этой строки.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π²ΠΈΠ΄Π°

#define ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€( ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ , ... , ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) строка_лСксСм

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

(с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ define) ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ².

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях строка замСщСния Π΅Ρ‰Π΅ Ρ€Π°Π· сканируСтся Π² поисках Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π½Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ строкС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ записи \ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌΠΎΠΉ строки.

Командная строка Π²ΠΈΠ΄Π°

#undef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Π²Π»Π΅Ρ‡Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Π½Ρƒ прСпроцСссорного опрСдСлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚Ρ€Π°.

11.2 Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

Командная строка компилятора Π²ΠΈΠ΄Π°

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

Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ этой строки ΠΏΠΎΠ»Π½Ρ‹ΠΌ содСрТимым Ρ„Π°ΠΉΠ»Π° имя_ Ρ„Π°ΠΉΠ»Π°. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ищСтся Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π°, Π° Π·Π°Ρ‚Π΅ΠΌ Π² стандартных ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… мСстах. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, командная строка Π²ΠΈΠ΄Π°

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

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

11.3 Условная компиляция

Командная строка компилятора Π²ΠΈΠ΄Π°

#if Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

провСряСт, являСтся Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ вычислСния выраТСния Π½Π΅-ноль. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚Ρ€Ρ‹Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² #12. ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π‘++ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ унарная опСрация defined. ΠŸΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ ΠΈΠ΄Π΅Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΎΠ½Π° Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅-ноль, Ссли этот ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Ρ‹Π» Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ #define ΠΈ послС этого Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ опрСдСлСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ #undef; ΠΈΠ½Π°Ρ‡Π΅ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. Командная строка Π²ΠΈΠ΄Π°

#ifdef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

провСряСт, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² прСпроцСссорС Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π±Ρ‹Π» Π»ΠΈ ΠΎΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки # define. Командная строка Π²ΠΈΠ΄Π°

#ifndef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

провСряСт, являСтся Π»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π² прСпроцСссорС Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство строк, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, содСрТащих ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку

#else

ΠΈ Π΄Π°Π»Π΅Π΅ Π΄ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

#endif

Если ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ условиС истинно, Ρ‚ΠΎ всС строки ΠΌΠ΅ΠΆΠ΄Ρƒ #else ΠΈ #endif ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Если ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ условиС Π»ΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ всС строки ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΈ #else ΠΈΠ»ΠΈ, Π² случаС отсуттвия #else, #endif, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.