Отключить предупреждения компилятора
- Войдите на сайт для отправки комментариев
Втр, 09/04/2019 - 13:26
Доброго времени.
Проект состоит из нескольких *.ino, *.h, *.cpp. В зависимости от выбранной платы объявляется или не объявляется директива #define __2560__. Один ino-файл содержит отладочные функции типа:
void serial_ui16(uint16_t &ui16) {
#ifdef __2560__
<....>
#endif
}При наличии #define __2560__ все пушисто. При остутствии компилятор начинает сыпать предупреждения типа:
warning: unused parameter 'ui16' [-Wunused-parameter]
void serial_ui16(uint16_t &ui16) {Попытка использовать #pragma warning(...) комплятором игнорируется:
warning: ignoring #pragma warning [-Wunknown-pragmas]
https://www.arduino.cc похоже не знает о "pragma". Как, если возможно, отключить предупреждения только в одном ino-файле, при условии, что в настройках IDE стоит Compiler warnings - All?
P.S.
Исключить использование #ifdef __2560__ - крайний вариант.
Feofan, отключать предупреждение - очень плохая идея. Разве что его можно отключить локально (только для этого места). Т.е. это здесь оно только глаза мозолит, а в другом месте - выручит.
Чтобы избавиться от него здесь и сейчас есть 100500 способов. Выбирайте (или свои добавляйте)
// №1 // // Кто сказал, что не используем? // void serial_ui16(uint16_t &ui16) { (void)ui16; #ifdef __2560__ <....> #endif } // №2 // #ifdef __2560__ void serial_ui16(uint16_t &ui16) { #ifdef __2560__ <....> #endif } #else #define serial_ui16(x) #endif // №3 // void serial_ui16(uint16_t & #ifdef __2560__ ui16 #endif ) { #ifdef __2560__ <....> #endif }Можно отключить проверку именно этого параметра навсегда ;))
void serial_ui16(uint16_t &ui16 __attribute__ ((unused))) { #ifdef ARDUINO_AVR_MEGA2560 Serial.print(ui16); #endif Serial.println(" Bla Bla"); }П.С.
Feofan, а ваш дефайн, он отличный от ARDUINO_AVR_MEGA2560? Столку немножко сбивает.
ЕвгенийП
Я зациклился на директивах препроцессора. Хотя нечто подобное #3 в голове мелькало. Спасибо.
DetSimen
Читал со смартфона и не запомнил. Все было неправильно?
Алексей.
Оттуда ноги и растут. На Mega2560 отлаживаю. В реальности ProMini, на Serial HС-05. Отключать вывод отладочной инфрмации надо только для ProMini.
ЕвгенийП
Я зациклился на директивах препроцессора. Хотя нечто подобное #3 в голове мелькало. Спасибо.
DetSimen
Читал со смартфона и не запомнил. Все было неправильно?
У ЕвгенияПетровича правильнее
Всем СПАСИБО! Глазу приятнее вариант #1. Все срослось.
void serial_ui16(uint16_t &ui16) { #ifdef __2560__ <....> #else (void)ui16; #endif }Всем СПАСИБО! Глазу приятнее вариант #1. Все срослось.
void serial_ui16(uint16_t &ui16) { #ifdef __2560__ <....> #else (void)ui16; #endif }Я для таких целей определяю:
И потом тупо пишу в начале функции
Директиву с именем (для примера) SOME_CONDITION можно определять, а можно - не определять, можно определять только для дебаг-режима, для нескольких плат сразу и т.п. Пмсм, в одном месте - удобнее, и избавляет от мусорных #ifdef в коде.
Всем СПАСИБО! Глазу приятнее вариант #1. Все срослось.
void serial_ui16(uint16_t &ui16) { #ifdef __2560__ <....> #else (void)ui16; #endif }А то #else нафига? Конструкция "(void)ui16;" реально не делает ничего и ни в какой код не преобразуется - её можно ставить без всяких else - они никому не мешает. Но она формально "использует" параметр.
В реальности без else.