+3 голосов
В разных примерах видел объявление констант по-разному. Где-то #define, а где-то const int. Есть ли между ними разница, и какой способ более предпочтительный?
(925 баллов) 40 74 103

2 Ответы

+2 голосов
 
Лучший ответ

Исчерпывающий ответ на вопрос есть тут
Если коротко - то для const действуют области видимости, есть тип, и по сути это обычные переменные доступные только для чтения - поэтому там где нужно именно число которое не должно меняться ни при каких условиях я бы использовал именно const int.
 #define ценен с директивами #if, #elif, #else и #endif когда необходимо управлять компиляцией частей исходного файла. Например этот оператор можно использовать чтобы один и тот же код компилировался для разных платформ Ардуино.

Пример:

#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)

#define LedPinOut() DDRB  |= (1<<5)
#define LedPinOn()  PORTB |= (1<<5)
#define LedPinOFF() PORTB &= (~(1<<5))

// Arduino Mega
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

#define LedPinOut() DDRB  |= (1<<7)
#define LedPinOn()  PORTB |= (1<<7)
#define LedPinOFF() PORTB &= (~(1<<7))

// Leonardo
#elif defined(__AVR_ATmega32U4__)

#define LedPinOut() DDRC  |= (1<<7)
#define LedPinOn()  PORTC |= (1<<7)
#define LedPinOFF() PORTC &= (~(1<<7))

// anything else
#else
#error "Board not supported"
#endif

LedPinOut() - порт на котором находится встроенный светодиод как выход
LedPinOn() - зажечь встроенный светодиод
LedPinOFF() - погасить встроенный светодиод
Данные макросы будут работать на платформах Uno(Nano), MEGA, Leonardo

(1.2 тыс. баллов) 7 26 51
выбран
0 голосов
Если кратко и просто. То #define вставляет на уровне компилятора ваш текст . Подобные "константы" не используют оперативную память    . А вот const уже используют. Можно сказать , что для ардуино с её небольшой оперативной памятью и не сложными программами лучше использовать define.
(3.1 тыс. баллов) 15 20 41
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. KrSV

    2 балл(ов)

  2. Палыч

    2 балл(ов)

  3. Дамир

    2 балл(ов)

  4. lcco

    2 балл(ов)

  5. Ergamister

    2 балл(ов)

  6. Александр312

    2 балл(ов)

...