2013-11-15 5 views
3

Что означает этот макрос? Я просто найти следующий макрос в исходных файлах:Что означает этот макрос? #define UNUSED (x) ((x) = (x))

#define UNUSED(x) ((x)=(x)) 
+4

Чтобы улучшить производительность процессора до нескольких процессоров ascii-art? ;-) – alk

+5

О, ничего себе, это неправильный способ реализовать '(void) x', чтобы избежать предупреждения неиспользуемой переменной. Использование присваивания имеет побочные эффекты, так что определение не означает, что оно говорит о жесте. – kfsone

+3

В дополнение к тому, что отметил @kfsone, 'x' вообще не имеет доступного оператора присваивания. Вместо этого используйте '#define UNUSED (x) (void) x'. – dkrikun

ответ

7

Это, вероятно, есть для подавления предупреждений компилятора неиспользуемых переменных/аргументов функций. Вы также можете использовать это:

// C++ only 
void some_func(int /*x*/) 

Или

// C and C++ 
void some_func(int x) 
{ 
    (void)x; 
} 

Или ваш компилятор может поддерживать флаг, чтобы сделать это, но они являются портативными и не будет пропускать допустимые предупреждения.

+0

Вы можете использовать анонимные параметры только в C++; они не разрешены в C. (Вопрос отмечен как C, так и C++, поэтому вы не ошибаетесь, но вы не дали существенного оговорки к своему предложению.) –

+1

@JonathanLeffler: вопросы с тегами с C и C++ должны быть отвергнутым ... Хорошо, однако, я разъясню. –

+0

@EdS. он должен быть разрешен, но только если пользователь правильно решает вопрос о различиях между C и C++. –

3

Используйте его, чтобы избавиться от предупреждения любого компилятора, ссылающегося на неиспользуемую переменную.

1

Остановить компилятор от жалобы на то, что переменная не используется.

Другие способы сделать это:

  • полностью удалить переменную: void foo(int)
  • из комментариев переменную: void foo(int /* value */)
  • использовать этот макрос: void foo(int value){ UNUSED(value); }
1

Некоторые компиляторы проблема предупреждения о неиспользуемых переменных - переменных, которые определены, но никогда не упоминаются. Иногда у вас есть код, который ссылается на переменную только при некоторых условных ifdefs (только на некоторых платформах или только при отладке), и неудобно дублировать эти условия в той точке, в которой определена переменная. Подобный макрос может использоваться для подавления предупреждения неиспользуемых переменных в таких случаях.

Смежные вопросы