Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° прСпроцСссора

Π£Ρ€ΠΎΠΊ β„–22. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора

Обновл. 11 БСн 2021 |

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ Π»ΡƒΡ‡ΡˆΠ΅ всСго Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая выполняСтся ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй. ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, прСпроцСссор просматриваСт ΠΊΠΎΠ΄ свСрху Π²Π½ΠΈΠ·, Ρ„Π°ΠΉΠ» Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π² поискС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ². Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа # ΠΈ НЕ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой. Π•ΡΡ‚ΡŒ нСсколько Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрим Π½ΠΈΠΆΠ΅.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include

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

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹:

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #define ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания макросов. ΠœΠ°ΠΊΡ€ΠΎΡ β€” это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π•ΡΡ‚ΡŒ Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° макросов: макросы-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ макросы-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

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

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… способов:

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

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с тСкст_Π·Π°ΠΌΠ΅Π½Π°

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

2.9 – Знакомство с прСпроцСссором

Врансляция ΠΈ прСпроцСссор

Когда Π²Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ свой ΠΊΠΎΠ΄, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ компилятор ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠ°ΠΊ Π²Ρ‹ Π΅Π³ΠΎ написали. На самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ.

ΠŸΠ΅Ρ€Π΅Π΄ компиляциСй Ρ„Π°ΠΉΠ» ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ этап, извСстный ΠΊΠ°ΠΊ трансляция. На этапС трансляции происходит ΠΌΠ½ΠΎΠ³ΠΎ всСго, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ваш ΠΊΠΎΠ΄ ΠΊ компиляции (Ссли Π²Π°ΠΌ интСрСсно, здСсь Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ список этапов трансляции). Π€Π°ΠΉΠ» ΠΊΠΎΠ΄Π° с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊ Π½Π΅ΠΌΡƒ трансляциями называСтся Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ трансляции.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ· этапов трансляции связан с прСпроцСссором. ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ Π»ΡƒΡ‡ΡˆΠ΅ всСго Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ тСкстом Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ΄Π°.

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

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

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ обсудим, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора.

Π’ качСствС отступлСния.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using (прСдставлСнныС Π² ΡƒΡ€ΠΎΠΊΠ΅ Β«2.8 – ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅Π½ ΠΈ пространства ΠΈΠΌΠ΅Π½Β») Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ прСпроцСссора (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, прСпроцСссором Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, хотя Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ прСпроцСссора, это Π½Π΅ всСгда Ρ‚Π°ΠΊ.

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

Когда прСпроцСссор запускаСтся для этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ½ замСняСт #include ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ содСрТимым Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ » iostream «.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ макросов

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания макросов. Π’ C++ макрос – это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅, ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ тСкст прСобразуСтся Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ тСкст с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π°ΠΌΠ΅Π½Ρ‹.

БущСствуСт Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° макросов: макросы, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΈ макросы, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ функциям.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ функциям, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ слуТат Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΠΈ. ΠœΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ здСсь ΠΈΡ… ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΡ… использованиС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ считаСтся опасным, ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ всё, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… способов:

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

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, с подставляСмым тСкстом

Когда прСпроцСссор встрСчаСт эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ, любоС дальнСйшСС появлСниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° замСняСтся подставляСмым тСкстом. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ набираСтся Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ с использованиСм подчСркивания для обозначСния ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ макросы использовались ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ дСшСвая Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° постоянным ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π’Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π΄Π°Π²Π½ΠΎ ΠΏΡ€ΠΎΡˆΠ»ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компиляторы стали ΡƒΠΌΠ½Π΅Π΅, Π° язык вырос. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ макросы ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΌ ΠΊΠΎΠ΄Π΅.

ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… макросов, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ эффСктивныС способы ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ. ΠœΡ‹ обсудим это Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² ΡƒΡ€ΠΎΠΊΠ΅ Β«4.14 – const, constexpr ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы».

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Π±Π΅Π· подставляСмого тСкста

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π±Π΅Π· подставляСмого ΠΏΡ€ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ тСкста.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ этого Ρ‚ΠΈΠΏΠ° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΈ слСдовало ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ: любоС дальнСйшСС появлСниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° удаляСтся ΠΈ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ замСняСтся!

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ довольно бСсполСзным, ΠΈ, Π΄Π°, это бСсполСзно для Π·Π°ΠΌΠ΅Π½Ρ‹ тСкста. Однако эта Ρ„ΠΎΡ€ΠΌΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. ΠœΡ‹ обсудим использованиС этой Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… макросов с Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌ тСкстом, макросы этой Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌΠΈ для использования.

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

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ распространСнноС использованиС условной компиляции Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ использованиС #if 0 для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° ΠΈΠ· компиляции (ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ находился Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²):

Π­Ρ‚ΠΎ обСспСчиваСт ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ Β«Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΊΠΎΠ΄, содСрТащий многострочныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ это интСрСсно:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ PRINT_JOE ΠΊΠ°ΠΊ Π½ΠΈΡ‡Ρ‚ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ прСпроцСссор Π½Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΠ» PRINT_JOE Π² #ifdef PRINT_JOE Π½ΠΈΡ‡Π΅ΠΌ?

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π·Π°ΠΌΠ΅Π½Ρƒ тСкста Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ прСпроцСссора ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, PRINT_JOE Π² #ifdef PRINT_JOE Π½Π΅ мСняСтся.

На самом Π΄Π΅Π»Π΅ Π²Ρ‹Π²ΠΎΠ΄ прСпроцСссора Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ содСрТит Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² – всС ΠΎΠ½ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ/ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ компилятор Π½Π΅ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ #define

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй свСрху Π²Π½ΠΈΠ· для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ прСпроцСссора всС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ опрСдСлСния Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ΄Π°, Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ языка Π‘

ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ языка Π‘ выполняСт макроподстановку, ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ со Π·Π½Π°ΠΊΠ° # (ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ символы пустого пространства), Π·Π°Π΄Π°ΡŽΡ‚ прСпроцСссору инструкции-Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹. Π˜Ρ… синтаксис Π½Π΅ зависит ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части языка; ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΈ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ влияниС (нСзависимо ΠΎΡ‚ области дСйствия) Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ трансляции. Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ строк ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: каТдая строка анализируСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ (Π½ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡΡ†Π΅ΠΏΠ»ΡΡ‚ΡŒ строки). ЛСксСмами для прСпроцСссора ΡΠ²Π»ΡΡŽΡ‚ΡΡ всС лСксСмы языка ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, любой символ, Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом, Ρ‚Π°ΠΊΠΆΠ΅ воспринимаСтся ΠΊΠ°ΠΊ лСксСма [19.2]. ВлияниС символов пустого пространства, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… табуляций, Π²Π½ΡƒΡ‚Ρ€ΠΈ строк прСпроцСссора Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора:

#define#endif# ifdef#line
#elif#error#ifndef# pragma
#else#if#include#undef

КаТдая Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° прСпроцСссора Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ строку. НапримСр, строка

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘ΠΈ++/ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² любой компилятор ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Π‘ΠΈ++ ΠΈ Π»ΡŽΠ±ΡƒΡŽ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Π½ΡƒΡŽ Π½Π° этот язык. ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π΄ΠΎ ΠΈΡ… компиляции. ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ прСпроцСссора.

Π’Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ всС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ со Π·Π½Π°ΠΊΠ° Ρ€Π΅ΡˆΡ‘Ρ‚ΠΊΠΈ ( # ) ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ строки исходного ΠΊΠΎΠ΄Π°:

#define эта Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° прСдусматриваСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макросов ΠΈΠ»ΠΈ прСпроцСссорных ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ это Π·Π°ΠΌΠ΅Π½Ρ‹ Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. #include позволяСт Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ тСкст Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² тСкст вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. #undef отмСняСт дСйствиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define #if организация условной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ². #ifdef организация условной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΡŽ #else организация условной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ². #endif организация условной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ². #elif организация условной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ². #line ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ строк Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. #error Π·Π°Π΄Π°Ρ‘Ρ‚ тСкст диагностичСского сообщСния, выводящиСся ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ошибок. #pragma зависит ΠΎΡ‚ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. # нулСвая, ΠΈΠ»ΠΈ пустая, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°, бСздСйствСнно пропускаСтся.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

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

Основная Ρ„ΠΎΡ€ΠΌΠ° синтаксиса Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define :

Π’Π°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include добавляСт содСрТимоС Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ». МоТно ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ опрСдСлСния констант ΠΈ ΠΌΠ°ΠΊΡ€ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #include Π² любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ». Вставка Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Π° для объСдинСния объявлСний Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ слоТных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. НуТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° этих Ρ‚ΠΈΠΏΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² созданный для этих Ρ†Π΅Π»Π΅ΠΉ Ρ„Π°ΠΉΠ».

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ прСпроцСссор ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ содСрТаниС Ρ„Π°ΠΉΠ»Π° с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ слСдуСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΎ присутствуСт Π² исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² мСстС располоТСния этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹. Новый тСкст Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора. ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ выполняСт Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π² Π½ΠΎΠ²ΠΎΠΌ тСкстС, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ тСкста исходного Ρ„Π°ΠΉΠ»Π°.

БпСцификация ΠΏΡƒΡ‚ΠΈ это имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ имя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°. Бинтаксис спСцификации Ρ„Π°ΠΉΠ»Π° зависит ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ компилируСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

ΠŸΡ€ΠΈ поискС Ρ„Π°ΠΉΠ»ΠΎΠ² прСпроцСссор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ «стандартного» ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. РасполоТСниС стандартных ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² для Ρ„Π°ΠΉΠ»ΠΎΠ² зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ стандартного ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² руководствС ΠΏΠΎ компилятору.

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

Если Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ спСцификация Ρ„Π°ΠΉΠ»Π° являСтся Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΉ, Ρ‚ΠΎ прСпроцСссор сначала ΠΈΡ‰Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Β«Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎΒ» Ρ„Π°ΠΉΠ»Π°. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ„Π°ΠΉΠ» это Ρ„Π°ΠΉΠ», содСрТащий Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #include. НапримСр, Ссли Ρ„Π°ΠΉΠ» f2 вставляСтся Π² Ρ„Π°ΠΉΠ» f1, Ρ‚ΠΎ f1 Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ.

Вставка Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ. Π’. Π΅. Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #include ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам вставляСтся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #include. Π€Π°ΠΉΠ» f2 ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» f3. Π’ этом случаС f1 всС Π΅Ρ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ для f2, Π½ΠΎ Β«Π΄Π΅Π΄ΡƒΡˆΠΊΠΎΠΉΒ» для f3.

ΠŸΡ€ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ вставкС Ρ„Π°ΠΉΠ»ΠΎΠ² поиск ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² начинаСтся с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ Π΄Π΅Π΄ΡƒΡˆΠΊΠΈΠ½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, поиск начинаСтся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ исходный Ρ„Π°ΠΉΠ». Если Ρ„Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚ΠΎ поиск продолТаСтся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС компилятора. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, производится поиск Π² стандартном ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Если спСцификация Ρ„Π°ΠΉΠ»Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки ( ), Ρ‚ΠΎ прСпроцСссор Π½Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ поиска Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Поиск Ρ„Π°ΠΉΠ»Π° начинаСтся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС компилятора, Π° Π·Π°Ρ‚Π΅ΠΌ Π² стандартном ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

ДопускаСтся Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вставки Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄ΠΎ 10 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… #include прСпроцСссор всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ вставку Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ исходный Ρ„Π°ΠΉΠ».

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #undef [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #undef удаляСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ всС Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ появлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСдпроцСссором. Для удалСния опрСдСлСния ΠΌΠ°ΠΊΡ€ΠΎ с использованиСм #undef, Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠ°ΠΊΡ€ΠΎ, Π½Π΅ задавая список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #undef ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ опрСдСлСния. Π’Π΅ΠΌ самым ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½.

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

УсловныС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #if, #ifdef, #else, #endif, #elif [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π­Ρ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ части исходного Ρ„Π°ΠΉΠ»Π°, провСряя постоянноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ тСкста Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² компилятор ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ тСкста Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· исходного Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ прСдпроцСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

Условная компиляция [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #line [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈ имя Ρ„Π°ΠΉΠ»Π° компилятора. Если имя Ρ„Π°ΠΉΠ»Π° ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ, ΠΎΠ½ΠΎ остаСтся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ. Cинтаксис Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹:

ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ #line 1000 «file.сpp» устанавливаСтся имя исходного Ρ„Π°ΠΉΠ»Π° file.сpp ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ строки 1000. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈ имя Ρ„Π°ΠΉΠ»Π° доступны Ρ‡Π΅Ρ€Π΅Π· константы прСпроцСссора __LINE__ ΠΈ __FILE__.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #error [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #error создаёт Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ сообщСниС ΠΎΠ± ошибкС Π²ΠΎ врСмя компиляции, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

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

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #pragma [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

#pragma это инструкция компилятору, которая опрСдСляСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ #pragma Π² языкС Π‘ΠΈ/Π‘ΠΈ++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для задания Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ компилятору. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих конструкций ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² структурах, Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ прСдупрСТдСния ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° прСпроцСссора

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСдпроцСссора это инструкции прСдпроцСссору Π‘. ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ Π‘ это тСкстовый процСссор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ тСкстом исходного Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ„Π°Π·Π΅ компиляции. Π₯отя компилятор Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ прСдпроцСссор Π½Π° своСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ стадии, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкста Π±Π΅Π· компилирования.

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

ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ Π‘ распознаСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹:

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСдпроцСссора ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ мСстС исходного Ρ„Π°ΠΉΠ»Π°, Π½ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Ρ‡Π°ΡΡ‚ΡŒ исходного Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ появились.

«ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ прСдпроцСссора» это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ признаСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² контСкстС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСдпроцСссора. Π•ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ спСцифичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° прСдпроцСссора: «ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ» (#), «Π²ΡΡ‚Π°Π²ΠΊΠΈ лСксСм» (##) ΠΈ defined. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² Π΄Π°Π½Π½ΠΎΠΉ Π“Π»Π°Π²Π΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² контСкстС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ defined Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ·ΠΆΠ΅ рассмотрСн Π² Π΄Π°Π½Π½ΠΎΠΉ Π“Π»Π°Π²Π΅ Π² Π Π°Π·Π΄Π΅Π»Π΅ «Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #if, #elif, #else ΠΈ #endif».

«ΠŸΡ€Π°Π³ΠΌΠ°» это «ΠΏΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ», ΠΈΠ»ΠΈ практичСская, инструкция компилятору Π‘. ΠŸΡ€Π°Π³ΠΌΡ‹ Π² исходном Ρ„Π°ΠΉΠ»Π΅ Π‘ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для управлСния дСйствиями компилятора Π½Π°Π΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· воздСйствия Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Ρ†Π΅Π»ΠΎΠΌ. (Бинтаксис ΠΏΡ€Π°Π³ΠΌ рассмотрСн Π² Π Π°Π·Π΄Π΅Π»Π΅ 8.6.) Однако, Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π°Π³ΠΌ опрСдСляСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ компилятора. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± использовании ΠΈ дСйствии ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€Π°Π³ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π’Π°ΡˆΠ΅ΠΌ РуководствС ΠΏΠΎ компилятору.

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

ПослС опрСдСлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π΅Π³ΠΎ нСльзя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ значСния, Ссли Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Однако, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π΅ΠΌ ΠΆΠ΅ самым ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ нСсколько Ρ€Π°Π·.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #undef удаляСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. ПослС удалСния опрСдСлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define ΠΈ #undef Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ соотвСтствСнно Π² Π Π°Π·Π΄Π΅Π»Π°Ρ… 8.2.2 ΠΈ 8.2.3.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° макросов. «ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅» макросы Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π° «Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΈ выглядят ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, поэтому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС, Ссли Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ макросами. Однако, макросы ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свои ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ссли Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ ΠΊ ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΈ использованию со всСй Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ макросов с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ придСтся Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ скобками для установлСния Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ порядка провСдСния вычислСний Π² выраТСниях. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, макросы ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ выраТСния с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π Π°Π·Π΄Π΅Π»Π° 8.2.2, «Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define».

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ прСдпроцСссора

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ спСцифичСских ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° прСдпроцСссора: ΠΎΠ΄ΠΈΠ½ прСдставлСн Π·Π½Π°ΠΊΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€Π° (#), Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€Π° (##), Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ словом defined. «Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ» ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (#), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ°ΠΊΡ€ΠΎ, заставляСт прСдпроцСссор Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² строковыС Ρ†ΠΈΡ‚Π°Ρ‚Π½Ρ‹Π΅ скобки. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «Π²ΡΡ‚Π°Π²ΠΊΠΈ лСксСм» (##) позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ слияниС лСксСм, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² качСствС Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π² Ρ„ΠΎΡ€ΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ лСксСмы. Π­Ρ‚ΠΈ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² контСкстС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define ΠΈ описаны Π² Π Π°Π·Π΄Π΅Π»Π°Ρ… 8.2.2.1 ΠΈ 8.2.2.2.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ defined ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ написаниС составных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ… ΠΌΠ°ΠΊΡ€ΠΎ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ условной компиляции ΠΈ поэтому рассмотрСн Π² Π Π°Π·Π΄Π΅Π»Π΅ 8.4.1 «Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #if, #elif, #else ΠΈ #endif».

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define

Если послС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° слСдуСт список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ появлСниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€(список-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° тСкст-Π·Π°ΠΌΠ΅Π½Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

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

АргумСнт тСкст-Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым. Π’Ρ‹Π±ΠΎΡ€ этой ΠΎΠΏΡ†ΠΈΠΈ удаляСт всС появлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈΠ· исходного Ρ„Π°ΠΉΠ»Π°. Однако, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ всС Π΅Ρ‰Π΅ считаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈ Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #if (рассматриваСтся Π² Π Π°Π·Π΄Π΅Π»Π΅ 8.4.1).

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

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

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π° появлСниями ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π² исходном Ρ„Π°ΠΉΠ»Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ списка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² тСкстС Π·Π°ΠΌΠ΅Π½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ # ΠΈΠ»ΠΈ ##, ΠΈΠ»ΠΈ Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ##, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. ВсС макросы Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π±ΡƒΠ΄ΡƒΡ‚ раскрыты Π΄ΠΎ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. (ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ # ΠΈ ## описаны Π² Π Π°Π·Π΄Π΅Π»Π°Ρ… 8.2.2.1 ΠΈ 8.2.2.2.) Бписок Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², сколько ΠΈΡ… Π² спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Если имя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΡ€ΠΎ появляСтся Π² тСкстС Π·Π°ΠΌΠ΅Π½Ρ‹ (Π΄Π°ΠΆΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ раскрытия Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΡ€ΠΎ), Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ раскрываСтся.

АргумСнты с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами ΠΈΠ½ΠΎΠ³Π΄Π° Π²Ρ‹Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ ΠΌΠ°ΠΊΡ€ΠΎ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Π—Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² тСкстС Π·Π°ΠΌΠ΅Π½Ρ‹ нСсколько Ρ€Π°Π·. Если Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ замСняСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом, Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, с Π΅Π³ΠΎ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π·. (Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4 Π² Π Π°Π·Π΄Π΅Π»Π΅ 8.2.2.2, «ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вставки лСксСм».

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ прСдпроцСссорной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вставки лСксСм (##)

Π£Π΄Π²ΠΎΠ΅Π½Π½Ρ‹ΠΉ Π·Π½Π°ΠΊ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «Π²ΡΡ‚Π°Π²ΠΊΠΈ лСксСм» (##) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΠΊΡ€ΠΎ. Он позволяСт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ лСксСмы Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ лСксСму ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ»ΠΈ послСднСй лСксСмой Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ°ΠΊΡ€ΠΎ.

Если Π΄ΠΎ ΠΈΠ»ΠΈ послС Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ°ΠΊΡ€ΠΎ стоит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вставки лСксСм, Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ замСняСтся Π½Π° нСраскрытый Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. РаскрытиС ΠΌΠ°ΠΊΡ€ΠΎ Π½Π΅ производится Π½Π°Π΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π΄ΠΎ Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½Ρ‹. Π—Π°Ρ‚Π΅ΠΌ всС появлСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° с тСкстС Π·Π°ΠΌΠ΅Π½Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ лСксСмы ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ лСксСма Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ. Если это Ρ‚Π°ΠΊ, Ρ‚ΠΎ лСксСма просматриваСтся Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ Π·Π°ΠΌΠ΅Π½Ρƒ, Ссли ΠΎΠ½Π° содСрТит имя ΠΌΠ°ΠΊΡ€ΠΎ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 7 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ лСксСмы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ вставлСны вмСстС с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° вставки лСксСм.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ опрСдСляСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ WIDTH ΠΊΠ°ΠΊ цСлая константа 80, Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… WIDTH опрСдСляСтся LENGTH ΠΈ цСлая константа 10. КаТдоС появлСниС LENGTH замСняСтся Π½Π° (WIDTH + 10). Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ появлСниС WIDTH + 10 замСняСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (80+10).

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ опрСдСляСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ FILEMESSAGE. Π•Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ строку использованиСм символа ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ дСлСния, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт символ Π½ΠΎΠ²ΠΎΠΉ строки.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°: REG1, REG2 ΠΈ REG3. REG1 ΠΈ REG2 ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово register. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ REG3 пусто, поэтому ΠΈΠ· исходного Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ всС появлСния REG3. Π­Ρ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ с REG1 ΠΈ REG2) Π·Π°Π΄Π°Π½Ρ‹ с классом хранСния register. (Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈ рассмотрСнии Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #if Π² Π Π°Π·Π΄Π΅Π»Π΅ 8.4.1.)

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ опрСдСляСтся ΠΌΠ°ΠΊΡ€ΠΎ с ΠΈΠΌΠ΅Π½Π΅ΠΌ MAX. ПослС этого опрСдСлСния всС появлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° MAX Π² исходном Ρ„Π°ΠΉΠ»Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ΠœΠ°ΠΊΡ€ΠΎ Π»Π΅Π³Ρ‡Π΅ читаСтся, Ρ‡Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, поэтому Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠ°ΠΊΡ€ΠΎ. НапримСр, появлСниС MAX(i, s[i++]) Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° ((i)>(s[i++]))?(i): (s[i++]). Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (s[i++]) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вычислСно Π΄Π²Π°ΠΆΠ΄Ρ‹, поэтому послС вычислСния Ρ‚Π΅Ρ€Π½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° i ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹ ΠΈΠ»ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ‹, Π² зависимости ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² сравнСния.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ опрСдСляСтся ΠΌΠ°ΠΊΡ€ΠΎ MULT. ПослС опрСдСлСния этого ΠΌΠ°ΠΊΡ€ΠΎ появлСниС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… MULT(3,5) Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° (3)*(5). Π‘ΠΊΠΎΠ±ΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Π°ΠΆΠ½Ρ‹, Ρ‚.ΠΊ. ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ слоТных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ°ΠΊΡ€ΠΎ. НапримСр, появлСниС MULT(3+4,5+6) Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° (3+4)*(5+6), Ρ‡Ρ‚ΠΎ даст Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ 77. Π‘Π΅Π· скобок ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 3+4*5+6, ΠΈΠ»ΠΈ 29, Ρ‚.ΠΊ. ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ умноТСния (*) ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слоТСния (+).

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π° ΠΌΠ°ΠΊΡ€ΠΎ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ раскрываСтся Π² строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π» Hello,Word!, Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ show, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Π΅Ρ€Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Однако, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΡ€ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ строковый ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (#), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСпосрСдствСнно ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ x. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² ΠΌΠ°ΠΊΡ€ΠΎ show Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ Ρ†ΠΈΡ‚Π°Ρ‚Π½Ρ‹Π΅ скобки.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ использованиС строкового ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° вставки лСксСм для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *