2016-02-23 10 views
4

Я использую глупость области видимости охранника, он работает, но выдает предупреждение о том, что переменная не используется:Как избежать предупреждения при использовании защиты области?

warning: unused variable ‘g’ [-Wunused-variable] 

Код:

folly::ScopeGuard g = folly::makeGuard([&] {close(sock);}); 

Как избежать такого предупреждения?

+0

Я думаю, что вы не должны использовать 'folly :: ScopeGuard g = folly :: makeGuard ([&] {close (sock);});'. Вы должны использовать 'SCOPE_EXIT {close (sock);}'. Посмотрите, исчезнет ли это предупреждение. Если это не так, возможно, есть способ взломать использование в определении. – nwp

+2

Какая версия компилятора? Если деструктор 'g' на самом деле что-то делает, компилятор не должен предупреждать об этом, его можно считать ошибкой (и, возможно, исправлены в более поздних версиях). –

+1

Следует отметить, что C++ 17, похоже, получает атрибут '[[maybe_unused]]', который предоставит стандартно гарантированный способ объявления о том, что переменная будет запущена. –

ответ

4

Вы можете отключить эти предупреждения на -Wno-unused-variable, хотя это немного опасно (вы потеряете все realy unused переменных).

Одно из возможных решений состоит в том, чтобы использовать переменную, но ничего не делать с ней. Например, случай, это аннулирует:

(void) g; 

, которые могут быть сделаны в макрос:

#define IGNORE_UNUSED(x) (void) x; 

В качестве альтернативы, вы можете использовать boost aproach: объявить шаблонную функцию, которая ничего не делает, и использовать его

template <typename T> 
void ignore_unused (T const &) { } 

... 

folly::ScopeGuard g = folly::makeGuard([&] {close(sock);}); 
ignore_unused(g); 
5

Вы можете просто пометить переменную как неиспользованная:

folly::ScopeGuard g [[gnu::unused]] = folly::makeGuard([&] {close(sock);}); 

Или бросить его к мочеиспусканию:

folly::ScopeGuard g = folly::makeGuard([&] {close(sock);}); 
(void)g; 

Ни велик, имо, но, по крайней мере, это позволяет сохранить предупреждения.

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

  • Нет связанных вопросов^_^