lea*_*vst 4 c++ lambda compiler-warnings c++11
有没有办法抑制特定文件,命名空间或特定变量的"未使用的变量"警告?
我问,因为我有一个包含lambda函数列表的命名空间.有些现在没有使用,但可能会及时使用.如果这些是常规免费功能,如果有些未使用,我不会收到警告.但是,因为它们是lambda,所以我最终得到了一堆编译器警告.
我不希望使用编译器标志除去所有这些类型的警告,因为通常情况下,它是非常有用的编译器捕捉未使用的变量.但是,有关未使用的实用程序功能的一堆警告会将噪声添加到其他有用的信息中.
有两种方法可以想到.首先,大多数构建环境都启用了每个源编译器标志,因此您应该能够仅为定义了所有这些lambda的单个文件关闭该警告.
然后有一种通用的方法来为单个变量静音这样的警告:使用它,但不是真的对它做任何事情.在一些编译器上,这可以通过简单的转换来实现:
auto x = /* ... */;
(void) x;
Run Code Online (Sandbox Code Playgroud)
但更有效的是定义一个简单的函数,使其(对于编译器)看起来好像使用了变量:
template <class T>
void ignore_unused(T&) {}
//later...
auto x = /* ... */;
ignore_unused(x);
Run Code Online (Sandbox Code Playgroud)
注意参数没有名字,所以编译器不会抱怨说一个不被使用.
这个想法非常普遍:用变量做一些有效的操作,但静态分析器会发出"未使用的变量"警告.
Boost有类似的功能, boost::ignore_unused_variable_warning()
有关更多信息,请参阅Herb Sutter的博客.