@Igorell0

Будет ли этот код использоваться при компиляции?

Добрый день!
У себя в коде определил такой макрос, который включается при флаге DEBUG:
#ifdef DEBUG
#define debug(n) Serial.println("***"+String(n)+"***")
#else
#define debug(n) NULL;
#endif

Недавно задался вопросом, а будет ли как то эта строка кода компилироваться, или заменится на NULL;? Я имею в виду, будет ли вызываться String вообще?
debug(
			"New parameters was applied:\n\tfrequency = " +
			String(freq) +
			"\n\t duty = " +
			String(duty)
		);
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Препроцессор работает на 4-й стадии трансляции кода.
Препроцессор оперирует напрямую строками модуля трансляции в виде блоков памяти.

Описание твоего макроса показывает что хоть debug и принимает аргумент, но вне отладочной конфигурации он этим аргументом не оперирует. В любом месте обращения к твоему макросу произойдет подстановка NULL вместо всего обращения.

На самом деле тебе и этот NULL в качестве подстановки не нужен. Зачем тебе в коде программы обилие висящих NULL? Если описать макрос так:
#ifdef DEBUG
#define debug(n) Serial.println("***"+String(n)+"***")
#else
#define debug(n)
#endif

то препроцессор будет просто затирать строку обращения к макросу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы