使用范围保护时如何避免警告?
How to avoid warning when using scope guard?
我正在使用 folly scope guard,它正在工作,但它会生成一条警告,指出该变量未被使用:
warning: unused variable ‘g’ [-Wunused-variable]
代码:
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});
如何避免这样的警告?
您可以将变量标记为未使用:
folly::ScopeGuard g [[gnu::unused]] = folly::makeGuard([&] {close(sock);});
或将其转换为 void:
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});
(void)g;
在我看来,两者都不是很好,但至少这可以让您保留警告。
您可以通过 -Wno-unused-variable
禁用此警告,尽管这有点危险(您丢失了所有 真正未使用的 变量)。
一个可能的解决方案是实际使用 变量,但什么也不做。例如,将其设为 void:
(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);
我正在使用 folly scope guard,它正在工作,但它会生成一条警告,指出该变量未被使用:
warning: unused variable ‘g’ [-Wunused-variable]
代码:
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});
如何避免这样的警告?
您可以将变量标记为未使用:
folly::ScopeGuard g [[gnu::unused]] = folly::makeGuard([&] {close(sock);});
或将其转换为 void:
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});
(void)g;
在我看来,两者都不是很好,但至少这可以让您保留警告。
您可以通过 -Wno-unused-variable
禁用此警告,尽管这有点危险(您丢失了所有 真正未使用的 变量)。
一个可能的解决方案是实际使用 变量,但什么也不做。例如,将其设为 void:
(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);