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

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

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

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° #define Π² Arduino IDE позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° значСниям (константам), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ скСтч Π±ΠΎΠ»Π΅Π΅ понятным. Π’.Π΅. ΠΌΠΎΠΆΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ имя константы ΠΈΠ»ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² скСтчС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… с описаниСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ #define Π² языкС программирования Arduino IDE.

Arduino define описаниС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹

Бинтаксис Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹:

#define

ΠŸΡ€ΠΈ использовании Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π΄Π΅Ρ„Π°ΠΉΠ½ слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ использования ΠΈΠΌΠ΅Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, константы ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ардуино, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΡ€ΠΈ компиляции. И ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² строчкС Π½Π΅ ставится Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ΠΈ Π·Π½Π°ΠΊ равСнства, ΠΊΠ°ΠΊ это происходит ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠ½Π°Ρ‡Π΅ компилятор выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ. Рассмотрим использованиС #define Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ описаниСм.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹: Arduino define pin

Π­Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с ΠΌΠΈΠ³Π°ΡŽΡ‰ΠΈΠΌ Ρ‚Ρ€Π΅Ρ…Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌ свСтодиодом. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ присвоили ΠΈΠΌΠ΅Π½Π° для ΠΏΠΈΠ½ΠΎΠ² 11, 12 ΠΈ 13, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ свСтодиод. ΠŸΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π½Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° вмСсто Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π΅ Π²ΡΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Ρ†Π²Π΅Ρ‚ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΏΠΈΠ½Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½. А ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° RED, GRN, BLU Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния ΠΏΡ€ΠΈ компиляции.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ #ifdef, #ifndef ΠΈ #endif Π² скСтчС

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ #ifdef Arduino IDE провСрят, Π±Ρ‹Π»ΠΎ Π»ΠΈ встрСчСно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅, Ссли Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ ставится Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΈ Π΄ΠΎ #endif. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ провСряСтся Π±Ρ‹Π» Π»ΠΈ Ρ€Π°Π½Π΅Π΅ Π² #define ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Ссли Π΄Π°, Ρ‚ΠΎ ΠΊΠΎΠ΄ (Π²Ρ‹Π²ΠΎΠ΄ сообщСния Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡ€Ρ‚Π° Arduino IDE) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Ссли ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ρ‚ΠΎ сообщСниС Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ #ifndef провСрят, Π±Ρ‹Π»ΠΎ Π»ΠΈ встрСчСно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π½Π΅Π΅ ΠΈ, Ссли Π½Π΅ Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ ставится Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΈ Π΄ΠΎ #endif. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ объявляСм Π½ΠΎΠ²ΡƒΡŽ константу, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ объявляли Π΅Π΅ Π² скСтчС Ρ€Π°Π½Π΅Π΅. Если Π΄Π΅Ρ„Π°ΠΉΠ½ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΆΠ΅ использовался, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ строчки Π²Π½ΡƒΡ‚Ρ€ΠΈ конструкции #ifndef … #endif.

Π—Π°ΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ define Arduino

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

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ pinMode() ΠΎΠ΄Π½ΠΈΠΌ словом Β«outΒ». Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π³Π΄Π΅ Π² скСтчС встрСтится слово Β«outΒ», компилятор подставит строку pinMode(pin, OUTPUT) с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ pin. Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ digitalWrite() ΠΈ delay(). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ RGB свСтодиод ΠΈΠ»ΠΈ Ρ‚Ρ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… свСтодиода с Ардуино Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° скСтча с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Π΄Π΅Ρ„Π°ΠΉΠ½.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ on(11, 500) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ строчки Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ функциями, конструкция просто подставляСт Π² ΠΊΠΎΠ΄ Π½ΡƒΠΆΠ½Ρ‹ΠΉ тСкст. Π’ Π±ΠΎΠ»Π΅Π΅ слоТных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π΅ΡΡ‚ΡŒ риск ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ самому ошибки, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² скСтчС ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ дСсятки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π³Π΄Π΅ Π΄Π΅Ρ„Π°ΠΉΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ. ΠŸΡ€ΠΈ этом Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ошибки компиляции ΠΈΠ»ΠΈ ошибки Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Arduino define ΠΈΠ»ΠΈ const, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ

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

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

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

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

Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° 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__ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΡ‘Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΎΠ± этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΊΠΎΠ³Π΄Π° Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

define

(PHP 4, PHP 5, PHP 7, PHP 8)

define β€” ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ константу

ОписаниС

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ константу Π²ΠΎ врСмя выполнСния.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

ΠΠ΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊ рСгистру константы хранятся Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния ΠΈΠ»ΠΈ false Π² случаС возникновСния ошибки.

Бписок измСнСний

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния константы с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ магичСская константа. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΡΠ±ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½Π΅ рСкомСндуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

User Contributed Notes 16 notes

Be aware that if «Notice»-level error reporting is turned off, then trying to use a constant as a variable will result in it being interpreted as a string, if it has not been defined.

I was working on a program which included a config file which contained:

//define(‘ENABLE_UPLOADS’, true);
?>

However, to my surprise, the program was still allowing uploads. Digging deeper into the code, I discovered this:

if ( ENABLE_UPLOADS ):
?>

Since ‘ENABLE_UPLOADS’ was not defined as a constant, PHP was interpreting its use as a string constant, which of course evaluates as True.

Not sure why the docs omit this, but when attempting to define() a constant that has already been defined, it will fail, trigger an E_NOTICE and the constant’s value will remain as it was originally defined (with the new value ignored).

(Guess that’s why they’re called «constants».)

define() will define constants exactly as specified. So, if you want to define a constant in a namespace, you will need to specify the namespace in your call to define(), even if you’re calling define() from within a namespace. The following examples will make it clear.

The following code will define the constant «MESSAGE» in the global namespace (i.e. «\MESSAGE»).

If you happen to name your constant the same as a function name (either a built-in function or a user-defined one), PHP can handle this correctly based on context. For example:

function myfunc () <
return ‘function output’ ;
>

// note that function names are NOT case-sensitive
// so calling MYFUNC() is the same as calling myfunc()

I think worth mentioning is that define() appears to ignore invalid constant names.
One immediate implication of this seem to be that if you use an invalid constant name you have to use constant() to access it and obviously that you can’t use the return value from define() to tell you whether the constant name used is invalid or not.

For example:
$name = ‘7(/!Β§%’;
var_dump(define($name, «hello»)); // outputs bool(true)
var_dump(constant($name)); // outputs string(5) «hello»

The value of a constant can be the value of another constant.

echo NEW_GOOD_NAME_CONSTANT ; // current
echo OLD_BAD_NAME_CONSTANT ; // legacy

There’s an undocumented side-effect of setting the third parameter to true (case-insensitive constants): these constants can actually be «redefined» as case-sensitive, unless it’s all lowercase (which you shouldn’t define anyway).

The fact is that case-sensitive constants are stored as is, while case-insensitive constants are stored in lowercase, internally. You’re still allowed to define other constants with the same name but capitalized differently (except for all lowercase).

A third party plugin might attempt to define a constant for which you already set a value. If it’s fine for them to set the new value, assuming you cannot edit the plugin, you could define your constant case-insensitive. You can still access the original value, if needed, by using any capitalization other than the one the plugin uses. As a matter of fact, I can’t think of another case where you would want a case-insensitive constant.

# Output
echo SOME_CONSTANT ; // prints «NEW_CONSTANT»
echo «
» ;
echo NEW_CONSTANT ; // prints «Some value»

?>

Needless to say that you’ll lose your IDE support for refactoring and highlighting completely for such cases.
No clue why someone would / could actually use this but i thought it’s worth mentioning.

It may be worth stating that a define function must be executed before its global constant is referenced.

Abc();
define(«TEST», 23);
function Abc()
<
echo TEST;
> // Abc

This code fails with a Notice-level message. TEST is treated here as being the string «TEST».

Found something interesting. The following define:

This may be common knowledge but I only found out a few minutes ago.

[EDIT BY danbrown AT php DOT net: The original poster is referring to the hyphens versus underscores. Hyphens do not work in defines or variables, which is expected behavior.]

But prior PHP 7, you can maybe do this, to pass an array elsewhere using define:

$serialized = DEFINEANARRAY; // passing directly the defined will not work
$our_array = unserialize($serialized);

With php 7 you can now define arrays.

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

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.

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

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

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