其他分享
首页 > 其他分享> > 在C => Compiler bug或代码bug中抑制未使用的变量警告?

在C => Compiler bug或代码bug中抑制未使用的变量警告?

作者:互联网

目前,我使用以下函数模板来抑制未使用的变量警告:

template<typename T>
void
unused(T const &) {
  /* Do nothing. */
}

但是,当从Linux移植到cygwin时,我现在在g 3.4.4上遇到编译器错误(在linux上我是3.4.6,所以这可能是一个bug修复?):

Write.cpp: In member function `void* Write::initReadWrite()':
Write.cpp:516: error: invalid initialization of reference of type 'const volatile bool&' from expression of type 'volatile bool'
../../src/common/Assert.h:27: error: in passing argument 1 of `void unused(const T&) [with T = volatile bool]'
make[1]: *** [ARCH.cygwin/release/Write.o] Error 1

未使用的参数是一个声明为的成员变量:

  volatile bool readWriteActivated;

这是编译器错误还是我的代码中的错误?

这是最小的测试用例:

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

int main() {
  volatile bool x = false;
  unused(!x); // type of "!x" is bool
}

解决方法:

指示您实际上不使用参数的实际方法是不给它命名:

int f(int a, float) {
     return a*2;
}

将打开所有警告的所有地方编译,而不会警告未使用的浮动.即使参数确实在原型中有一个名称(例如int f(int a,float f);),它仍然不会抱怨.

标签:member-variables,c,language-lawyer,templates
来源: https://codeday.me/bug/20191006/1861436.html