Отключить предупреждения компилятора

Feofan
Offline
Зарегистрирован: 28.05.2017
Доброго времени.
Проект состоит из нескольких *.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__ - крайний вариант.
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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
}


 

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Можно отключить проверку именно этого параметра навсегда ;))

void serial_ui16(uint16_t &ui16 __attribute__ ((unused))) {
  #ifdef ARDUINO_AVR_MEGA2560
  Serial.print(ui16);
  #endif
  Serial.println(" Bla Bla");
}

П.С.
Feofan, а ваш дефайн, он отличный от ARDUINO_AVR_MEGA2560? Столку немножко сбивает.

 

Feofan
Offline
Зарегистрирован: 28.05.2017

ЕвгенийП

Я зациклился на директивах препроцессора. Хотя нечто подобное #3 в голове мелькало. Спасибо.

DetSimen

Читал со смартфона и не запомнил. Все было неправильно?

Feofan
Offline
Зарегистрирован: 28.05.2017

Алексей.

Оттуда ноги и растут. На Mega2560 отлаживаю. В реальности ProMini, на Serial HС-05. Отключать вывод отладочной инфрмации надо только для ProMini.

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Feofan пишет:
Оттуда ноги и растут. На Mega2560 отлаживаю.
Дык дефайн то уж в ардуино-иде, точнее в борде, уже для этой меги декларирован, я и на измене, что за зверь такой __2560__

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Feofan пишет:

ЕвгенийП

Я зациклился на директивах препроцессора. Хотя нечто подобное #3 в голове мелькало. Спасибо.

DetSimen

Читал со смартфона и не запомнил. Все было неправильно?

У ЕвгенияПетровича правильнее

Feofan
Offline
Зарегистрирован: 28.05.2017

Всем СПАСИБО! Глазу приятнее вариант #1. Все срослось.

void serial_ui16(uint16_t &ui16) {
#ifdef __2560__
 <....>
#else
 (void)ui16;
#endif
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Feofan пишет:

Всем СПАСИБО! Глазу приятнее вариант #1. Все срослось.

void serial_ui16(uint16_t &ui16) {
#ifdef __2560__
 <....>
#else
 (void)ui16;
#endif
}

 

Я для таких целей определяю:

#ifdef SOME_CONDITION
	#define UNUSED(x) (void)(x)
#else
	#define UNUSED(x) (void)0
#endif

И потом тупо пишу в начале функции

UNUSED(param);

Директиву с именем (для примера) SOME_CONDITION можно определять, а можно - не определять, можно определять только для дебаг-режима, для нескольких плат сразу и т.п. Пмсм, в одном месте - удобнее, и избавляет от мусорных #ifdef в коде.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Feofan пишет:

Всем СПАСИБО! Глазу приятнее вариант #1. Все срослось.

void serial_ui16(uint16_t &ui16) {
#ifdef __2560__
 <....>
#else
 (void)ui16;
#endif
}

 

А то #else нафига? Конструкция "(void)ui16;" реально не делает ничего и ни в какой код не преобразуется - её можно ставить без всяких else - они никому не мешает. Но она формально "использует" параметр.

Feofan
Offline
Зарегистрирован: 28.05.2017

В реальности без else.