Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define

Arduino define ΠΈ const

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ define Π² Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π² языкС C++, Π½ΡƒΠΆΠ½Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ написаниС скСтчСй. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Π·Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… разбСрСмся с Ρ‚Π°ΠΊΠΈΠΌΠΈ вопросами, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ #define, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ прСпроцСссор, Π² ΠΊΠ°ΠΊΠΈΡ… случаях Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ define, Π° Π² ΠΊΠ°ΠΊΠΈΡ… – Π»ΡƒΡ‡ΡˆΠ΅ const.

Бинтаксис define Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ

Бинтаксис использования инструкции достаточно прост:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ строки Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°ΠΊ Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования define:

Π’Π΅Π»ΠΎ макроса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ строкС. Но Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ многострочный Π±Π»ΠΎΠΊ, Ρ‚ΠΎ добавляСм символ β€œ/” Π² ΠΊΠΎΠ½Ρ†Π΅. НапримСр:

ОписаниС define

#define являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· инструкций прСпроцСссора Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ ΠΈ C++. Π‘Π°ΠΌΠΎ слово прСпроцСссор ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ‚Π°ΠΊΠΈΠΌΠΈ инструкциями ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ основного процСсса компиляции ΠΊΠΎΠ΄Π°. Π’ΠΎ врСмя Ρ‚Π°ΠΊΠΎΠ³ΠΎ Β«Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎΒ» этапа прСпроцСссор компилятора ΠΏΡ€ΠΎΠ±Π΅Π³Π°Π΅Ρ‚ ΠΏΠΎ исходному ΠΊΠΎΠ΄Ρƒ, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС наши инструкции ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π·Π°ΠΌΠ΅Π½Ρƒ прямо Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ исходном ΠΊΠΎΠ΄Π΅. ВсС это дСлаСтся Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΡ‚ нас, ΠΌΡ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² этого ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ шага Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ. И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСпроцСссора запускаСтся сам компилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚Π΅Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ сдСлал прСпроцСссор.

Π’ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ это Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ макросов ΠΈ шаблонов. Расставив ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ #define ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΠΎ всСму ΠΊΠΎΠ΄Ρƒ, ΠΌΡ‹ Π΄Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ компилятору автоматичСски Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ. ЕдинствСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ – Ссли ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок β€œβ€. Π’ΠΎΠ³Π΄Π° подстановки Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ВсС это Π½ΡƒΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎ врСмя создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° написаниС ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Β«Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ словом Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Β«Π΄Π»ΠΈΠ½Π½ΡƒΡŽΒ» ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ Π΅Π΅ (Β«ΠΊΠΎΡ€ΠΎΡ‚ΠΊΡƒΡŽΒ»), Π° Π½Π΅ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ. А компилятор сам подставит Β«Π΄Π»ΠΈΠ½Π½ΡƒΡŽΒ» Π² Π½ΡƒΠΆΠ½Ρ‹Π΅ мСста ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ подстановки Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ само подставится Π²ΠΎ всСх Π½ΡƒΠΆΠ½Ρ‹Ρ… мСстах. ВозмоТностСй использования #define – ΠΌΠ½ΠΎΠ³ΠΎ. Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ – посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ define Π² arduino

define pin

Π‘Π°ΠΌΠΎΠ΅ частоС использованиС define Π² Arduino – это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант для Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΈΠ½ΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции define ΠΌΠΎΠΆΠ΅ΠΌ Β«Π΄Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅Β» ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ числу, ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Π²Π΅Π·Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Π’ΠΎΡ‚ самый простой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° со свСтодиодами:

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΎΠ΅ слово PIN_LED ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ Π² ΠΊΠΎΠ΄Π΅. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ пробСТится ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ ΠΈ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ встрСтит словосочСтаниС PIN_LED, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Π΅Π³ΠΎ Π½Π° Ρ†ΠΈΡ„Ρ€Ρƒ 13. Π’.Π΅. Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ pinMode всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΈΠ½Π° 13. И функция digitalWrite Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ 13. Но ΠΏΡ€ΠΈ этом ΠΌΡ‹ явно Π² ΠΊΠΎΠ΄Π΅ Ρ†ΠΈΡ„Ρ€Ρƒ 13 Π½Π΅ использовали. А это ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ: Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ€Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 12), Π½Π°ΠΌ Π½Π΅ придСтся Π±Π΅Π³Π°Ρ‚ΡŒ Π² уТасС ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€Ρ‹.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ просто помСняСм Ρ†ΠΈΡ„Ρ€Ρƒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· (Π² Π±Π»ΠΎΠΊΠ΅ #define ) ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ Π²ΠΎ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вмСсто PIN_LED Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ†ΠΈΡ„Ρ€Π° 12. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ссли Ρƒ вас скСтч Π΄Π»ΠΈΠ½ΠΎΠΉ 1000 строк ΠΈ Π² 50 Ρ€Π°Π·Π½Ρ‹Ρ… мСстах Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ ΠΏΠΈΠ½Ρƒ 13, Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° 12. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ #define Π²Ρ‹ вмСстС с компилятором Π°Ρ€ΡƒΠΈΠ½ΠΎ сдСлаСтС всС Π·Π° 1 сСкунду. А Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π΄Π° Π±Π΅Π· ошибок, Π²Π°ΠΌ придСтся ΠΏΡ€ΠΎΠ²ΠΎΠ·ΠΈΡ‚ΡŒΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ дольшС.

define константы

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ #define ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ «псСвдо константы». Они Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ константы, Π½ΠΎ самих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ этом Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. НапримСр, создав макрос BUTTON_UP со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 1, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΊΠΎΠ΄Π΅ ΠΊΠ°ΠΊ константу. НапримСр, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π²Π²Π΅Ρ€Ρ…, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ функциям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ дСйствия. Π‘Π°ΠΌ ΠΊΠΎΠ΄ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ: Ρ…ΠΎΡ‚ΠΈΠΌ – 1, Ρ…ΠΎΡ‚ΠΈΠΌ – 345 (Ρ‚Π°ΠΊΠΈΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «магичСскими», Ρ‚.ΠΊ. ΠΈΡ… ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‚ сами программисты ΠΈ Π½Π΅ всСгда понятно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ), Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот ΠΊΠΎΠ΄ оставался Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π›ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ Π² константС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, BUTTON_UP) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ константы.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ define

Π’Ρ‹ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±Π»ΠΎΠΊΠ΅ инструкции define Π΄Ρ€ΡƒΠ³ΠΈΠ΅ макросы. НапримСр:

#define delay delay(pin)

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ вмСсто pin подставится Ρ†ΠΈΡ„Ρ€Π° 13 ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

#define delay delay(13)

Ошибки define

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ define – это Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ макроса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ совпадаСт с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ конструкциями языка. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ Π½Π°ΠΉΠ΄Π΅Ρ‚ всС ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Π² define. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρƒ всС Ρ€Π°Π²Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ конструкции ΠΎΠ½ замСняСт, поэтому ΠΎΠ½ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ подстановку любого ΠΊΠΎΠ΄Π°. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ нСпрСдсказуСмым.

#define setup 12345

,Π²Ρ‹ заставитС Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ setup ΠΈ бСзобидная функция прСвратится Π²

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ приступит ΠΊ компиляции, ΠΎΠ½ ΡƒΠΆΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ setup ΠΈ ΠΎΡ‡Π΅Π½ΡŒ рассСрдится. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΎΠ½ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ ΡΠΎΠ²Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎ ΡΡ‚Ρ€Π°Π½Π½ΡƒΡŽ строку 12345, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰e ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡƒΠ»ΠΎΠ²ΠΈΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, просто нСчаянно Π΄ΠΎΠ±Π°Π²ΠΈΠ² символ Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой Π² ΠΊΠΎΠ½Π΅Ρ† строки:

ПослС подстановки эта конструкция прСвратится Π² digitalWrite(13;, HIGH). Π’.Π΅. Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² появится Ρ‚ΠΎΡ‡ΠΊΠ° с запятой – Π° это, Π±Π΅Π· сомнСния, Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ синтаксиса.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ ошибкой ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ нСсоотвСтствиС Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Π½Π΅ смоТСтС сразу ΠΆΠ΅ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ. НапримСр, Ссли Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅

#define PIN_LED pin12

Π’ΠΎ ΠΏΡ€ΠΈ использовании Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

#Ifdef, #ifndef ΠΈ #endif – Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ прСпроцСссора

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π·Π½Π°Ρ‚ΡŒ, объявили Π»ΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ Π² #define ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Ρ€Π°Π½Π΅Π΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, Ссли Ρƒ нас ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ ΠΌΡ‹ Π½Π΅ всСгда ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ наши ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Для всСго этого ΠΌΡ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ инструкции #ifdef ΠΈΠ»ΠΈ #ifndef, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ провСрят, Π±Ρ‹Π»ΠΎ Π»ΠΈ встрСчСно Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅ ΠΈ, Ссли Π±Ρ‹Π»ΠΎ (ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ – для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°), Ρ‚ΠΎ оставит Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΈ Π΄ΠΎ мСста встрСчи #endif.

#ifdef имя_макроса
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ оставлСны Π² ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π΄Π°Π½Π½Ρ‹ΠΉ макрос Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ€Π°Π½Π΅Π΅ инструкциСй #
define. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π΄Π°Π½Π½Ρ‹ΠΉ участок ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½
#endif

#ifndef имя_макроса
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ оставлСны Π² ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π΄ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° макрос Π½Π΅ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½
#endif

ΠœΡ‹ провСряСм, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π»ΠΈ Ρ€Π°Π½Π΅Π΅ Π² #define ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΈ Ссли Π΄Π°, Ρ‚ΠΎ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

#define DEBUG 1 // Если Π·Π°ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю эту строку, Ρ‚ΠΎ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ сообщСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для ifndef. ΠœΡ‹ объявляСм константу, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π½Π΅ Π΄Π΅Π»Π°Π»ΠΈ этого Ρ€Π°Π½Π΅Π΅.

ВсС достаточно понятно ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ конструкции

define ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° функциям

БСйчас ΠΌΡ‹ рассмотрим Π±ΠΎΠ»Π΅Π΅ слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования define – ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ конструкции define ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Но сначала Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Π·Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ.

#define on digitalWrite(13, HIGH)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ достаточно Π΄Π»ΠΈΠ½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ digitalWrite Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ словом on. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π΅Π·Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅, Π³Π΄Π΅ встрСтится on, компилятор (прСпроцСссор компилятора) вставит строку digitalWrite(13, HIGH). И Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ функция loop Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

void loop() <
digitalWrite(13, HIGH);
>

ВсС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ свСтодиод ΠΈ ΠΏΠΎΠΌΠΈΠ³Π°Ρ‚ΡŒ ΠΈΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ on ΡƒΠΆΠ΅ Π½Π΅ получится, Ρ‚.ΠΊ. Π½Π° Π΅Π΅ мСстС появится Π²Ρ‹Π·ΠΎΠ² для Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ свСтодиода Π½Π° 13 ΠΏΠΎΡ€Ρ‚Ρƒ. И Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Ρ‹Ρ…ΠΎΠ΄Π°:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – это ΠΏΡƒΡ‚ΡŒ Π² Π½ΠΈΠΊΡƒΠ΄Π°. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΎΠΏΡΡ‚ΡŒ придСтся Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ тСкста. А Π²ΠΎΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΡ‹ сСйчас рассмотрим.

Π’ прСпроцСссорС Π‘++ (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π°Ρ€Π΄ΡƒΠΈΠ½ΠΎ), ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСпроцСссор Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. МоТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС on Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ digitalWrite для 13 ΠΏΠΈΠ½Π°, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ – для 12 ΠΈ Ρ‚.Π΄. Для этого Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

#define on(pin) digitalWrite(pin, HIGH)

Π’ инструкции #define ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сами Π½Π°Π·Π²Π°Π»ΠΈ a(ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ любоС имя) ΠΈ прописали Π΅Π³ΠΎ явно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скобок: on(a). Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части инструкции ΠΌΡ‹ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС: digitalWrite (pin, HIGH).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, встрСтив ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ on(13), прСпроцСссор вставит слово digitalWrite (pin, HIGH), Π° вмСсто pin Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π² скобках: Ρ†ΠΈΡ„Ρ€Ρƒ 13. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π² ΠΊΠΎΠ΄ вставится строка digitalWrite (13, HIGH).

Π£ΠΊΠ°Π·Π°Π² on(12), ΠΌΡ‹ заставим Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ digitalWrite (12, HIGH). И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Π² зависимости ΠΎΡ‚ Π½Π°ΡˆΠΈΡ… Π½ΡƒΠΆΠ΄.

Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡ€ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (ΠΏΡΠ΅Π²Π΄ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ) off(pin), которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ подстановку digitalWrite (pin, LOW).

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠΎΠ΄ маячка со свСтодиодами ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ чрСзвычайности простым:

МоТно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ сильнСС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΌΠ°ΠΊΡ€ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

Достаточно интСрСсно, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… инструкций. Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ остановимся ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ограничСниях.

ВсС Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ создавая Ρ‚Π°ΠΊΡƒΡŽ Β«Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒΒ» ΠΈΠ· собствСнных инструкций ΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ сильно рискуСм:

Π Π°Π΄ΠΈ справСдливости скаТСм ΠΈ ΠΎ ΠΏΠ»ΡŽΡΠ°Ρ…:

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

Define ΠΈΠ»ΠΈ const

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ #define являСтся использованиС констант. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° Π² arduino ΠΈ C++ – это пСрСмСнная, которая опрСдСляСтся c ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ const. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

сonst int PIN_LED = 10;

Π’ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ define:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ – Π² ΠΊΠΎΠ΄Π΅ Π²Ρ‹ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° digitalRead(PIN_LED) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅: Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ мСсто вставится Ρ†ΠΈΡ„Ρ€Π° 10.

Но использованиС константы всС-Ρ‚Π°ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

Если ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ объСм памяти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для скСтча с использованиСм #define ΠΈΠ»ΠΈ const, Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… прСимущСств Π½ΠΈ Ρ‚ΠΎΡ‚, Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ Π½Π΅ Π΄Π°ΡŽΡ‚ – компилятор Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ объСм памяти для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, объявлСнной явно ΠΈΠ»ΠΈ встроСнной Π² Π²ΠΈΠ΄Π΅ макроса. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· всСго этого, ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈ использовании констант Π² ΠΊΠΎΠ΄Π΅ всС-Ρ‚Π°ΠΊΠΈ Π±Ρ€Π°Ρ‚ΡŒ Π·Π° основу const.

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

#define

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define опрСдСляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Β­ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΊΒ­ΠΆΠ΅ называСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ макроса, Π° процСсс замСщСния называСтся подстановкой макроса. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Β­Ρ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

#define имя_макроса ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ_символов

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ отсутствуСт Ρ‚ΠΎΡ‡ΠΊΠ° с запятой. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΒ­Ρ€ΠΎΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ символов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любоС число ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². ΠœΠ°ΠΊΡ€ΠΎΡ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку.

НапримСр, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ TRUE для значСния 1, a FALSE для 0 Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° макроса:

#define TRUE 1
#define FALSE 0

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Ссли компилятор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ TRUE ΠΈΠ»ΠΈ FALSE, Ρ‚ΠΎ ΠΎΠ½ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ ΠΈΡ… Π½Π° 1 ΠΈ 0 соотвСтствСнно. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран Β«0 1 2Β»:

printf («%d %d %d», FALSE, TRUE, TRUE + 1);

Π’ случаС, Ссли макрос ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для опрСдСлСния Π΄Ρ€ΡƒΠ³ΠΈΡ… макросов. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ сопоставляСт с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ONE, TWO ΠΈ THREE ΠΈΡ… числСнныС значСния:

#define ONE 1
#define TWO ONE + ONE
#def ine THREE ONE + TWO

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ макроподстановки ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ строками. Если Π½Π΅Β­ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ стандартноС сообщСниС ΠΎΠ± ошибкС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΒ­ΡŽΡ‰Π΅Π³ΠΎ:

#define E_MS «Standart error on input.\n»
/*. */
printf(E_MS);

Если компилятор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ E_MS, Ρ‚ΠΎ ΠΎΠ½ Π·Π°ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ строкой Β«Standart error on input.Β» На самом Π΄Π΅Π»Π΅ компилятор ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Π²ΠΈΠ΄Π΅

printf(«Standart error on input.\n»);

Если ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ находится Π² строкС, Ρ‚ΠΎ подстановка Π½Π΅ происходит. НапримСр:

#define XYZ this is a test
/*. */
printf(«XYZ»);

Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π΅ Β«this is a testΒ», a Β«XYZΒ».

Если строка Π½Π΅ вмСщаСтся Π² ΠΎΠ΄Π½ΠΎΠΉ строкС, Ρ‚ΠΎ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС, помСстив Π² ΠΊΠΎΠ½Ρ†Π΅ строки ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

#define LONG_STRING «This is a very long» \
string that is used as an example.»

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, ΠΏΠΈΡˆΡƒΡ‰ΠΈΠ΅ Π½Π° Π‘, часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹ для опрСдСлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Β­Ρ‚ΠΎΡ€ΠΎΠ². Π”Π°Π½Π½ΠΎΠ΅ соглашСниС ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, бросив Π½Π° Π½Π΅Π΅ ΠΎΠ΄ΠΈΠ½ взгляд, ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с макросом. Π’Π°ΠΊΠΆΠ΅ Π²ce #define Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

ΠžΡ‡Π΅Π½ΡŒ часто макросы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для опрСдСлСния «магичСских чисСл», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΠΌΠ΅. НапримСр, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ массив ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ТСстко ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ макрос, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚Β­ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ массива, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ‚Π΅Ρ… мСстах, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ использованиС Ρ€Π°Π·Β­ΠΌΠ΅Ρ€Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, СдинствСнноС, Ρ‡Ρ‚ΠΎ трСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, β€” это ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ #define ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’Π΅Π·Π΄Π΅, Π³Π΄Π΅ использо­вался Π΄Π°Π½Π½Ρ‹ΠΉ макрос, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄ΡƒΡ‚ автоматичСскиС измСнСния. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

#define MAX_SIZE 100
/*. */
float balance[MAX_SIZE];
/*. */
float temp[MAX_SIZE];

Для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠ±ΠΎΠΈΡ… массивов просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ MAX_SIZE.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: макрос ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ встрСчС Ρ‚Π°ΠΊΠΎΠ³ΠΎ макроса Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ макроса Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ макроса называСтся макрос Ρ‚ΠΈΠΏΠ° функция. НапримСр:

Из-Π·Π° способа подстановки данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ EVEN(9 + 1) Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡΡ Π΄ΠΎ

Как извСстно, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ взятия ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ‡Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сло­ТСния. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сначала выполнится взятиС ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ с числом 1, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ прибавится ΠΊ 9, Ρ‡Ρ‚ΠΎ, СстСствСнно, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ 0. Для устранСния Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ слС­дуСт Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π° Π² макросС EVEN Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСр­сии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

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

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

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

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define

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

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

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

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

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

#define / undef

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

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

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

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

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

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define На этом слоТности Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ: #define ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ»Π΅Π·Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, которая ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° послС ΠΏΠ΅Ρ€Π²ΠΎΠΉ! ВСрнёмся ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ с DarkMagenta – Ссли Π² ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ я Π·Π°Π΄Π΅Ρ„Π°ΠΉΠ½ΡŽ это слово ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π΄ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ FastLED – я ΠΏΠΎΠ»ΡƒΡ‡Ρƒ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции! Если ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ мСстами – ошибки Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Но, Ссли я Π·Π°Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DarkMagenta Π² своём скСтчС, я Π±ΡƒΠ΄Ρƒ нСприятно ΡƒΠ΄ΠΈΠ²Π»Ρ‘Π½ =) Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define Π§Ρ‚ΠΎ я Ρ…ΠΎΡ‡Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΈΡ‚ΠΎΠ³Π΅: #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__ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ строки Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π·Π²Π°Π½ этот макрос Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define

__COUNTER__

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

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

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

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² этом Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ символов ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ_символов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любоС количСство ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², Π½ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΠΊΠΎΠ½Ρ†Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ строк.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ вмСсто значСния 1 Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ слово LEFT (Π»Π΅Π²Ρ‹ΠΉ), Π° вмСсто значСния 0 β€” слово RIGHT (ΠΏΡ€Π°Π²Ρ‹ΠΉ). Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ объявлСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define :

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ 1 ΠΈΠ»ΠΈ 0 ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π² вашСм Ρ„Π°ΠΉΠ»Π΅ исходного ΠΊΠΎΠ΄Π° встрСчаСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ соотвСтствСнно LEFT ΠΈΠ»ΠΈ RIGHT. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран 0 1 2:

ПослС опрСдСлСния имя макроса ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² опрСдСлСниях Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠΌΠ΅Π½ макросов. Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ΄, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ значСния ONE (ΠΎΠ΄ΠΈΠ½), TWO (Π΄Π²Π°) ΠΈ three (Ρ‚Ρ€ΠΈ):

ΠœΠ°ΠΊΡ€ΠΎΠΏΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° β€” это просто Π·Π°ΠΌΠ΅Π½Π° ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° связанной с Π½ΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ символов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ стандартноС сообщСниС ΠΎΠ± ошибкС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Если ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ строки, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. НапримСр, ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°

Если ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ_символов Π½Π΅ помСщаСтся Π² ΠΎΠ΄Π½ΠΎΠΉ строкС, Ρ‚ΠΎ эту ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС, помСстив Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ:

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, ΠΏΠΈΡˆΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘, Π² ΠΈΠΌΠ΅Π½Π°Ρ… опрСдСляСмых ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΡƒΠΊΠ²Ρ‹ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра. Если Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ этому ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ, Ρ‚ΠΎ Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда ΠΏΠΎΠΉΠΌΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°ΠΌΠ΅Π½Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, всС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #define ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² самом Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π° Π½Π΅ Ρ€Π°Π·Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макросов с Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

послС ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°ΠΌΠ΅Π½Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π²

ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ.

ИспользованиС вмСсто настоящих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ макросов с Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π΄Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ сущСствСнноС прСимущСство: увСличиваСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΊΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΈΡ… случаях Π½Π΅ Π½Π°Π΄ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ рСсурсы Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Однако Ссли Ρƒ макроса с Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΎΡ‡Π΅Π½ΡŒ большиС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΈΠ·-Π·Π° дублирования ΠΊΠΎΠ΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости достигаСтся Π·Π° счСт увСличСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

На Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒΠ’ Π‘99 ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ макрос с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ количСством Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²; ΠΎΠ± этом рассказываСтся Π² части II этой ΠΊΠ½ΠΈΠ³ΠΈ.

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

Π Π΅ΠΊΠ»Π°ΠΌΠ°

Π˜Π½ΡΡ‚Π°Π»Π»ΡΡ‚ΠΎΡ€ CreateInstall
БСсплатныС ΠΈ коммСрчСскиС инсталляторы

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° define

Команда define

Команда define ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для описания макросов. ΠœΠ°ΠΊΡ€ΠΎΡΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²: число, строка, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ имя ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Π’Π°ΠΊΠΆΠ΅ макросу ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ макроса. Π’ дальнСйшСм, для подстановки Π΅Π³ΠΎ значСния, имя макроса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ $имямакроса ΠΈΠ»ΠΈ $имямакроса$. ΠœΠ°ΠΊΡ€ΠΎΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ define. ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан ΠΎΠ΄ΠΈΠ½ макрос. Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ макроса, послС Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ставится = ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ константа ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠΌΠ΅Π½Π°Ρ… макросов Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹.

Атрибуты

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρƒ define Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ export ΠΈ namedef. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ export Ссли Π²Ρ‹ распространяСтС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² Π²ΠΈΠ΄Π΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° (.ge Ρ„Π°ΠΉΠ») ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ эти макросы ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Если Ρƒ define опрСдСлСния ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ namedef, Ρ‚ΠΎ всС Π΅Π³ΠΎ макросы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· указания символа ‘$‘.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ define

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя Ρƒ define опрСдСлСния. Π’ этом случаС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ макросам Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ρ‚Π°ΠΊ ΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ define ΠΈΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ сдСлано для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ макросами ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’ этом случаС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ макросу ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄: $имяdefine.имямакроса.

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅

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

ВыраТСния

ΠœΠ°ΠΊΡ€ΠΎΡΠ°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ присвоСны Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа, Π½ΠΎ ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠžΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ константы ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ макросы. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… опСрация Π½Π° страницС ΠœΠ°ΠΊΡ€ΠΎΠ²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ.

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

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

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