Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятора

ΠžΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятора:

Бписок Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² компилятора

— Π·Π°Π΄Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° прилоТСния (windows/console).

-гСнСрация Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² XML Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: true, false.

— ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π² качСствС управляСмого рСсурса

— Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π΅Π³ΠΈΠΎΠ½Π° (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ сворачивания ΠΊΠΎΠ΄Π°

— Π½Π°Π·Π²Π°Π½ΠΈΠ΅ сборки ΠΊΠ°ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

— ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС сборки

— информация ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅

— Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ содСрТимого ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

— ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ… $ifdef, $ifndef.

— ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ дСйствия Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ $define.

— Π½Π°Ρ‡Π°Π»ΠΎ Π±Π»ΠΎΠΊΠ° условной компиляции (провСряСтся условиС: «ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½»).

— Π½Π°Ρ‡Π°Π»ΠΎ Π±Π»ΠΎΠΊΠ° условной компиляции (провСряСтся условиС: «ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½»).

— Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° «ΠΈΠ½Π°Ρ‡Π΅» Π² Π±Π»ΠΎΠΊΠ΅ условной компиляции.

— Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° условной компиляции.

— строки с быстрым доступом ΠΊ символам Π½Π° запись, Π½ΠΎ со ссылочной сСмантикой.

— Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ строк, индСксируСмых с 0.

— Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ строк, индСксируСмых с 0.

— Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ строк, индСксируСмых с 0.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ $ifdef, $ifndef совмСстно с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ $else ΠΈ $endif ΡƒΠΏΡ€Π°Π²Π»ΡŽΡ‚ условной компиляциСй частСй исходного Ρ„Π°ΠΉΠ»Π°. КаТдой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ $ifdef, $ifndef Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ Π΅Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° $endif. ΠœΠ΅ΠΆΠ΄Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ $ifdef, $ifndef ΠΈ $endif допускаСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство Π±Π»ΠΎΠΊΠΎΠ² условной компиляции (Π² Ρ‚ΠΎΠΌ числС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ…) ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ $else.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ИспользованиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² условной компиляции.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° прСпроцСссора #nullable устанавливаСт контСкст с Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΎ допустимости Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ NULL ΠΈ контСкст с прСдупрСТдСниями ΠΎ допустимости Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ NULL. Π­Ρ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° опрСдСляСт, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ прСдупрСТдСния ΠΎ допустимости Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ NULL. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ контСкст Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Π»ΠΈΠ±ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½.

Оба контСкста ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ исходного ΠΊΠΎΠ΄Π° C#). Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #nullable управляСт контСкстами Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ уровня ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π·Π°Π΄Π°Π΅Ρ‚ контСксты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ управляСт, ΠΏΠΎΠΊΠ° другая Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ Π΅Π΅, ΠΈΠ»ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° исходного Ρ„Π°ΠΉΠ»Π°.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ использования Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²:

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

Для управлСния условной компиляциСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора.

Для Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚ SDK, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ символы условной компиляции для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ Π² Visual Studio с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ страниц свойств ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ†Π΅Π»Π΅Π²Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для использования Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Ρ… интСрфСйсов API, ΠΊΠΎΠ³Π΄Π° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ символов

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ символов для условной компиляции.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #define нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для объявлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ констант, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ дСлаСтся Π² C ΠΈ C++. Для опрСдСлСния констант Π² C# слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСскиС элСмСнты класса ΠΈΠ»ΠΈ структуры. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… констант ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для Π½ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс «Constants».

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ областСй

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ области ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² структуру, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #region позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ структурирования Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΊΠΎΠ΄Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΈΠ»ΠΈ нСсколько, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚ΠΎΠΉ части Ρ„Π°ΠΉΠ»Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² настоящСС врСмя ΠΈΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ:

БвСдСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ прСдупрСТдСниях

Π’Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ компилятору ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ошибки ΠΈ прСдупрСТдСния компилятора, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ свСдСниями ΠΎ строках с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ².

#error позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ CS1029 ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ мСста Π² ΠΊΠΎΠ΄Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ #error version особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ сообщаСт ΠΎΠ± ошибкС компилятора CS8304 с сообщСниСм, содСрТащим ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ вСрсии компилятора ΠΈ языка.

#warning позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ компилятора CS1030 ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ мСста Π² ΠΊΠΎΠ΄Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #line позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ строки компилятора ΠΈ ΠΏΡ€ΠΈ нСобходимости имя Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ошибки ΠΈ прСдупрСТдСния.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚ Π΄Π²Π° прСдупрСТдСния, связанныС с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ строк. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #line 200 ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ устанавливаСт Π½ΠΎΠΌΠ΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки 200 (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΎΠΌΠ΅Ρ€ 6). Π”ΠΎ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #line Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ имя Ρ„Π°ΠΉΠ»Π° Special. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #line default ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ восстанавливаСт Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΡŽ строк Π² исходноС состояниС с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ строк, Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

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

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #line hidden Π½Π΅ влияСт Π½Π° ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° строк Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π°Ρ… ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ошибки Π² скрытом Π±Π»ΠΎΠΊΠ΅ компилятор ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ имя Ρ„Π°ΠΉΠ»Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€ строки, Π³Π΄Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° ошибка.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #line filename Π·Π°Π΄Π°Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… компилятора. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ фактичСскоС имя Ρ„Π°ΠΉΠ»Π° с исходным ΠΊΠΎΠ΄ΠΎΠΌ. Имя Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ (» «). ΠŸΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½ΠΎΠΌΠ΅Ρ€ строки.

Начиная с C# 10 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #line :

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ этой Ρ„ΠΎΡ€ΠΌΡ‹:

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создано ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:

ПослС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ сопоставлСния пСрСмСнная b находится Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС, Π² ΡˆΠ΅ΡΡ‚ΠΎΠΌ символС.

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки (DSL) ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивноС сопоставлСниС исходного Ρ„Π°ΠΉΠ»Π° с созданными Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ C#. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ этого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² спСцификации Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ pragma

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

pragma-name β€” имя распознанной ΠΏΡ€Π°Π³ΠΌΡ‹, Π° pragma-arguments β€” Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, относящиСся ΠΊ ΠΏΡ€Π°Π³ΠΌΠ΅.

#pragma warning

#pragma warning ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ прСдупрСТдСния.

warning-list β€” список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ-запятой. ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ CS являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Если Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹, disable ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС прСдупрСТдСния, Π° restore Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС прСдупрСТдСния.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² Visual Studio, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ сборку ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ поиск Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΎΠΊΠ½Π΅ Π’Ρ‹Π²ΠΎΠ΄.

#pragma checksum

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы для исходных Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ с ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ страниц ASP.NET.

«filename» β€” это имя Ρ„Π°ΠΉΠ»Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся наблюдСниС Π·Π° измСнСниями ΠΈΠ»ΠΈ обновлСниями, «» β€” Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (GUID) для Ρ…ΡΡˆ-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π° «checksum_bytes» β€” строка ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Ρ†ΠΈΡ„Ρ€, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π±Π°ΠΉΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы. Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ числом ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Ρ†ΠΈΡ„Ρ€. НСчСтноС число Ρ†ΠΈΡ„Ρ€ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ прСдупрСТдСния Π²ΠΎ врСмя компиляции, ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π°.

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Visual Studio ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ источника. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ вычисляСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму для исходного Ρ„Π°ΠΉΠ»Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ„Π°ΠΉΠ» Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (PDB) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ PDB-Ρ„Π°ΠΉΠ» для сравнСния с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммой, вычислСнной ΠΈΠΌ для исходного Ρ„Π°ΠΉΠ»Π°.

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ASP.NET, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ рассчитанная ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма относится ΠΊ созданному исходному Ρ„Π°ΠΉΠ»Ρƒ, Π° Π½Π΅ Ρ„Π°ΠΉΠ»Ρƒ ASPX. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, #pragma checksum прСдоставляСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм для страниц ASP.NET.

ΠŸΡ€ΠΈ создании ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ASP.NET Π² Visual C# созданный исходный Ρ„Π°ΠΉΠ» содСрТит ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму для ASPX-Ρ„Π°ΠΉΠ»Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ создаСтся источник. Π—Π°Ρ‚Π΅ΠΌ компилятор записываСт эти Π΄Π°Π½Π½Ρ‹Π΅ Π² PDB-Ρ„Π°ΠΉΠ».

Если компилятор Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #pragma checksum Π² Ρ„Π°ΠΉΠ»Π΅, ΠΎΠ½ вычисляСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму ΠΈ записываСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² PDB-Ρ„Π°ΠΉΠ».

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

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятора

Π’ мСню OPTIONS/COMPILER Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ компилятора. Π’ рядС случаСв Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ дСйствиС Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ ΠΏΡ€ΠΈ трансляции Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ОсобСнно часто, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, такая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ диску: Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пытаСтся ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ диск, Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° исполнСния ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, Ссли ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ I/O CHECKING, этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° смоТСт ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ послСдствия обращСния ΠΊ диску ΠΈ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ дСйствия.

Π’ Π’ΡƒΡ€Π±ΠΎ ПаскалС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ возмоТности компилятора Π² процСссС компиляции. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ, условными ΠΈ парамСтричСскими. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° Ρ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ OPTIONS/COMPILER; условныС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ условия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; парамСтричСскиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ компилятор.

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

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятора Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° своСго появлСния Π² тСкстС Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ модуля, Ρ‚.Π΅. Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ‚Π΅Π»Π΅ модуля, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΎΠΏΡ†ΠΈΠΈ, установлСнныС Π² самой срСдС, Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° всС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’ случаС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ ΠΈ опциями, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ отдаСтся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ расставлСнныС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСзависимо ΠΎΡ‚ настройки срСды. Они особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² случаС, ΠΊΠΎΠ³Π΄Π° компиляция осущСствляСтся Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌ компилятором Π’Π .Π•Π₯Π•.

НСкоторыС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятора ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡Π°ΡΡ‚ΡŒ тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ; Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ этого Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² самом Π½Π°Ρ‡Π°Π»Π΅ тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (модуля) ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ сразу Π½Π° всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (ΠΌΠΎΠ΄ΡƒΠ»ΡŒ) Π² Ρ†Π΅Π»ΠΎΠΌ.

НиТС приводится список всСх Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² компилятора. Π’ скобках даСтся дСйствиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ для Π·Π½Π°ΠΊΠ° Β«-Β». Π—Π½Π°ΠΊΠΎΠΌ * ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹.

<$А+>— Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ слова (Π±Π°ΠΉΡ‚Π°);

— Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ) Ρ€Π°Π±ΠΎΡ‚Ρƒ со встроСнным ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ;

<$Π•+>— Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ) Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ эмуляции сопроцСссора;

— ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ дальнюю (блиТнюю) модСль Π²Ρ‹Π·ΠΎΠ²Π°;

<$L+>— Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ (Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ) Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ символы Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°;

— ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ числовой сопроцСссор (Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ);

<$O+>— Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ) созданиС ΠΎΠ²Π΅Ρ€Π»Π΅ΠΉΠ½ΠΎΠΉ структуры;

<$Π₯+>— ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ) Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ синтаксис.

К условным Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌ относятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятора:

— ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ условный символ;

— ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ установку условного символа; Ссли символ установлСн, Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ вся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² <$ELSE>ΠΈΠ»ΠΈ , Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ компилятором;

<$ELSE>— опрСдСляСт Π½Π°Ρ‡Π°Π»ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ случаС, Ссли условный символ, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΠΎ тСксту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ΠΏΠ»ΠΈ , Π½Π΅ установлСн; Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ вмСстС с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ;

— ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² <$IFDEF>, ΠΈΠ»ΠΈ <$ELSE>.

WriteLn (‘ΠžΡ‚Π»Π°Π΄ΠΊΠ°: Ρ…=,Ρ…);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли установлСн (Π·Π°Π΄Π°Π½ Π² срСдС ΠΈΠ»ΠΈ Π²Π²Π΅Π΄Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ) условный символ DEBUG, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ WRITELN, Ссли этот условный символ Π½Π΅ Π·Π°Π΄Π°Π½, компилятор пропустит этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ условныС символы Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связаны с мноТСством ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ нСдоступны Π΅ΠΉ Π½Π° этапС исполнСния. Для ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° нСльзя Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

Ссли, разумССтся, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° пСрСмСнная ΠΈΠ»ΠΈ константа с этим ΠΈΠΌΠ΅Π½Π΅ΠΌ.

ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ условных символов. Для тСстирования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… условий ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ условных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² компилятора, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ… <$IFDEF>ΠΈΠ»ΠΈ <$IFNDEF>программист ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ стандартныС условныС символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² срСдС автоматичСски:

К парамСтричСским относятся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹:

Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ <$М>всС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² Π±Π°ΠΉΡ‚Π°Ρ…, ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятыми. ΠœΠ΅ΠΆΠ΄Ρƒ Π±ΡƒΠΊΠ²ΠΎΠΉ М ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π΅Π», ΠΌΠ΅ΠΆΠ΄Ρƒ послСднСй Ρ†ΠΈΡ„Ρ€ΠΎΠΉ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ динамичСской памяти ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… символов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ($L) ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для указания компилятору Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ трансляции ассСмблСрной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, объявлСнной Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠ°ΠΊ внСшняя

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

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€

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

#include – ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. НапримСр Ρƒ нас Π² ΠΏΠ°ΠΏΠΊΠ΅ со скСтчСм Π΅ΡΡ‚ΡŒ ΠΏΠ°ΠΏΠΊΠ° libs, Π° Π² Π½Π΅ΠΉ – Ρ„Π°ΠΉΠ» mylib.h. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ», пишСм:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ΅ со скСтчСм, Π² ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ΅ libs.

#define / undef

Или быстрого ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅:

Или Π΄Π°ΠΆΠ΅ Π·Π°Π΄Π΅Ρ„Π°ΠΉΠ½ΠΈΡ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΉ кусок ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ пСрСносы ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш

Если DEBUG Π·Π°Π΄Π΅Ρ„Π°ΠΉΠ½Π΅Π½, Ρ‚ΠΎ DEBUG_PRINT – это ΠΌΠ°ΠΊΡ€ΠΎ-функция, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΡ€Ρ‚. А Ссли Π½Π΅ Π·Π°Π΄Π΅Ρ„Π°ΠΉΠ½Π΅Π½ – всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ DEBUG_PRINT просто ΡƒΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΊΠΎΠ΄Π° ΠΈ экономят ΠΏΠ°ΠΌΡΡ‚ΡŒ!

Если DEBUG_ENABLE Π·Π°Π΄Π΅Ρ„Π°ΠΉΠ½Π΅Π½ – всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ DEBUG() Π² ΠΊΠΎΠ΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΏΠΎΡ€Ρ‚. Если Π½Π΅ Π·Π°Π΄Π΅Ρ„Π°ΠΉΠ½Π΅Π½ – ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΠ˜Π§Π•Πœ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ просто β€œΠ²Ρ‹Ρ€Π΅ΠΆΡƒΡ‚ΡΡβ€ ΠΈΠ· ΠΊΠΎΠ΄Π°! Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎ DEBUG_ENABLE ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСриал ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ: Ссли ΠΎΠ½Π° Π½Π΅ Π½ΡƒΠΆΠ½Π° – ΡƒΠ±Ρ€Π°Π»ΠΈ DEBUG_ENABLE ΠΈ ΠΈΠ· ΠΊΠΎΠ΄Π° убрался запуск ΠΏΠΎΡ€Ρ‚Π° ΠΈ всС Π²Ρ‹Π²ΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΠΊΠΎ сокращаСт ΠΎΠ±ΡŠΡ‘ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ памяти:

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора На этом слоТности Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ: #define ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ»Π΅Π·Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, которая ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° послС ΠΏΠ΅Ρ€Π²ΠΎΠΉ! ВСрнёмся ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ с DarkMagenta – Ссли Π² ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ я Π·Π°Π΄Π΅Ρ„Π°ΠΉΠ½ΡŽ это слово ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π΄ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ FastLED – я ΠΏΠΎΠ»ΡƒΡ‡Ρƒ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции! Если ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ мСстами – ошибки Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Но, Ссли я Π·Π°Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DarkMagenta Π² своём скСтчС, я Π±ΡƒΠ΄Ρƒ нСприятно ΡƒΠ΄ΠΈΠ²Π»Ρ‘Π½ =) Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора Π§Ρ‚ΠΎ я Ρ…ΠΎΡ‡Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΈΡ‚ΠΎΠ³Π΅: #define – Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд. ИспользованиС define с Π½Π΅Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ нСпросто ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΠ°Π»ΠΊΠ° ΠΎ Π΄Π²ΡƒΡ… ΠΊΠΎΠ½Ρ†Π°Ρ…: с ΠΎΠ΄Π½ΠΎΠΉ стороны хочСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ define, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΠΊΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ случайно Π½Π΅ ΠΏΡ€ΠΎΠ»Π΅Π· со своими Π΄Π΅Ρ„Π°ΠΉΠ½Π°ΠΌΠΈ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, своя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ. Какой Ρ‚ΡƒΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄? ΠžΡ‡Π΅Π½ΡŒ простой! Π”Π΅Π»Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Π΄Π΅Ρ„Π°ΠΉΠ½ΠΎΠ² максимально ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ: Ссли это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° – ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ прСфикс Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ссли это скСтч – Π΄Π΅Π»Π°Ρ‚ΡŒ прСфикс с ΠΈΠΌΠ΅Π½Π΅ΠΌ скСтча. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ define Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ констант ΠΈΠ»ΠΈ enum, enum кстати ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ define Π² ΠΏΠ»Π°Π½Π΅ создания Π½Π°Π±ΠΎΡ€Π° констант, Π° мСста Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ совсСм Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ!

#if – условная компиляция

Условная компиляция являСтся вСсьма ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ°ΠΊ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚Π°ΠΊ ΠΈ для ΠΆΠ΅Π»Π΅Π·Π°. Рассмотрим Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ условной компиляции:

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ условной компиляции ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ части ΠΊΠΎΠ΄Π° ΠΈΠ· компиляции, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ· Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. Рассмотрим нСсколько конструкция для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°: [fusion_accordion type=”” boxed_mode=”” border_size=”1β€³ border_color=”” background_color=”” hover_color=”” divider_line=”” title_font_size=”” icon_size=”” icon_color=”” icon_boxed_mode=”” icon_box_color=”” icon_alignment=”” toggle_hover_accent_color=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” title=β€ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1β€³ open=”no”] [/fusion_toggle][fusion_toggle title=β€ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2β€³ open=”no”] [/fusion_toggle][fusion_toggle title=β€ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3β€³ open=”no”] [/fusion_toggle][/fusion_accordion]

БообщСния ΠΎΡ‚ компилятора

#pragma

Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. ЯвляСтся Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΈ соврСмСнной Π·Π°ΠΌΠ΅Π½ΠΎΠΉ конструкции Π²ΠΈΠ΄Π°

Π’Π°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² 99% Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ„Π°ΠΉΠ»ΠΎΠ² ядра ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΈΠΊΠΎΠ² с ΠΊΠΎΠ΄ΠΎΠΌ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ с #pragma pack ΠΈ #pragma pop позволяСт Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ структуры Π² памяти. Π’Π΅ΠΌΠ° слоТная, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π½Π° Π₯Π°Π±Ρ€Π΅.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹

Π£ прСпроцСссора Π΅ΡΡ‚ΡŒ нСсколько интСрСсных макросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² своём ΠΊΠΎΠ΄Π΅. Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° Arduino (Ρ‚ΠΎΡ‡Π½Π΅Π΅, Π½Π° компиляторС avr-gcc).

__func__ ΠΈ __FUNCTION__

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ __func__ ΠΈ __FUNCTION__ β€œΠ²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚β€ Π² Π²ΠΈΠ΄Π΅ символьного массива (строки) Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹. Π―Π²Π»ΡΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. НапримСр:

__DATE__ ΠΈ __TIME__

__DATE__ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Ρ‚Ρƒ компиляции ΠΏΠΎ систСмному Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² Π²ΠΈΠ΄Π΅ символьного массива (строки) Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ __TIME__ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ врСмя компиляции ΠΏΠΎ систСмному Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² Π²ΠΈΠ΄Π΅ символьного массива (строки) Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π§Π§:ММ:Π‘Π‘

Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с этим макросом ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, это вСдь просто Π½Π°Π±ΠΎΡ€ символов. Π£ мСня Π΅ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° buildTime, которая позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (дСнь, мСсяц, Π³ΠΎΠ΄, часы, ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, сСкунды). Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ/ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ здСсь.

__FILE__ ΠΈ __BASE_FILE__

__FILE__ ΠΈ __BASE_FILE__ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ ΠΊΠ°ΠΊ строку. Π―Π²Π»ΡΡŽΡ‚ΡΡ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

__LINE__

__LINE__ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ строки Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π·Π²Π°Π½ этот макрос Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора

__COUNTER__

__COUNTER__ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, начиная с 0. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ __COUNTER__ увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ макроса Π² ΠΊΠΎΠ΄Π΅.

__COUNTER__ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΡ‘Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΎΠ± этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΊΠΎΠ³Π΄Π° Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·.

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

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

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