Вопрос “детский”, потому в песочнице.
Итак, есть некий код, например
#define EXAMPLE1
#define EXAMPLE2
void setup() {
Serial.begin(9600);
}
void loop() {
#if defined(EXAMPLE1) || defined(EXAMPLE2)
Serial.println("yes");
#else
Serial.println("no");
#endif
}
Т.е. некий участок кода должен компилироваться только если задан хоть один из дефайнов. Но таких участков кода может быть много, где-то под условие попадает целая функция, где-то только часть кода в функции. Соотвественно, везде приходится писать конструкцию типа
#if defined(EXAMPLE1) || defined(EXAMPLE2)
......
#endif
С одной стороны ну и что? А с другой стороны может добавиться еще какой-то дефайн, и по всему проекту нужно будет искать и дополнять условия
#define EXAMPLE1
#define EXAMPLE2
#define EXAMPLE3
void setup() {
Serial.begin(9600);
}
void loop() {
#if defined(EXAMPLE1) || defined(EXAMPLE2) || defined(EXAMPLE3)
Serial.println("yes");
#else
Serial.println("no");
#endif
}
Где-то что-то можно упустить, а потом словить какой-нибудь глюк )))
Собственно, для решения проблемы сделал так
#define EXAMPLE1
#define EXAMPLE2
#define EXAMPLE3
#define THREE defined(EXAMPLE1) || defined(EXAMPLE2) || defined(EXAMPLE3)
void setup() {
Serial.begin(9600);
}
void loop() {
#if THREE
Serial.println("yes");
#else
Serial.println("no");
#endif
}
Все работает, vs code никаких предупреждений не выдает, можно успокоиться ))
Но тут что-то дернуло меня скомпилировать этот же код в Arduino IDE, и тут мне было выдано
/mnt/B6F0D77CF0D74173/_Documents/Vladimir/YandexDisk/Arduino/_temp/test1/test1.ino:12:5: warning: this use of "defined" may not be portable [-Wexpansion-to-defined]
#if THREE
^~~
Собственно, сразу возникли вопросы:
Во-первых, а действительно, можно ли так делать? А то вдруг… ))
Во-вторых, почему же vs code мне этих предупреждний не показывает? В настройках выбрано Log Level: verbose, собственно, более подробных вариантов нету.
Ну и в третьих, а как заставить vs code выдавать все предупреждения? В Ардуино IDE уровень verbose соответствет настройке Сообщения компилятора: Подробнее, но там есть еще уровень Все, хотелось бы такой же иметь и в vs code.
А то до смешного - среди прочих предупреждений в давно вроде бы отлаженной библиотеке вдруг указало на строку типа
result = result = true;
)))