从C++中删除"unused variable"警告
Remove "unused variable" warinings from C++
我得到了一些代码,并试图删除所有的警告为给定的代码。
而对于某些功能,如:
sub_main(int /*argc*/, char** /*argv*/){
-------------
obj1* ptr1 = new obj1(xxx);
obj2* ptr2 = obj1->xxxx(xxxx)
-------------
}
而这个ptr1和ptr2在这个函数中根本不使用。(它应该在某个地方使用,因为如果我注释掉它们,我就会得到某些错误)。
还有一些方法可以对未使用的参数(如
)静音警告sub_main(int /*argc*/ )
或
sub_main(int a _ _ attribute_ _ ((unused)))
对于未使用的变量,是否有类似的整洁方法来消除警告?
我不想为gcc做一些ifdef来删除警告或沉默makefile中的警告。
谢谢。
对于未使用的变量var,可以使用:
(void)var;
首先,为什么注释掉argc和argv ?如果您不打算使用它们,则不需要它们。你可以简单地
sub_main()
,这就足够了,但是如果您打算使用它们,无论何时应该包含它们。这看起来有点像K&R/ANSI C,如果你使用c++ 98+,你应该这样定义它们:
int sub_main(int argc, char ** const argv)
{
...
return 0; //or whatever
}
有效的K&R/ANSI语法应该是
sub_main(argc, argv) //int left off as it defaults to int
int argc;
char ** const argv;
{
...
return 0; //or whatever
}
同样,未使用的变量警告部分来自于你对参数名的注释(C/c++倾向于忽略未使用的参数,但喜欢对未命名的参数吹毛求疵,尽管c++ 99以后它是有效的,并且对于某些函数是必需的,例如后缀操作符)
另一个问题是,您从未使用变量ptr1
和ptr2
。一旦你使用它们,警告就会消失。如果您根本不打算使用它们,则不应该定义它们,因为这通常会浪费内存(尽管目前c++仍然设置为大喊大叫可能无关紧要)。
当您遇到警告时,您的第一步(第二步,可能是第三步)应该是尝试通过解决它来消除它。只有当你真正确定它是假的,你才应该让它闭嘴。
在您的情况下,如果根本不使用ptr1
,则不要声明它。你说删除它会在其他地方引入错误。这意味着obj1
在它的构造函数中做了一些疯狂的事情(比如在某处注册新创建的实例),或者整个代码是一团糟。如果是前者,只需删除变量定义并将new obj1(xxx);
作为语句执行。但是首先要确保指针被存储在某个地方,并且通过new
表达式旁边的注释来记录。
包含ptr2
的行甚至不应该像现在这样编译,因为obj1
是一个类型,你不能对它应用->
。但我假设您实际上指的是ptr1->xxxx(xxx)
,在这种情况下,确实使用了ptr1
,只有ptr2
需要删除-只需保留ptr1
原样,只需通过调用ptr1->xxxx(xxx);
替换ptr2
的声明。并且确保ptr1
所指向的对象没有泄漏。
避免此警告的方法是定义如下函数:
template <typename T> remove_warning_for_unused_variable(const T&) {}
然后使用
remove_warning_for_unused_variable(variable);
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 叮当声:折叠表情和"expression result unused"警告
- Clang 对使用的类型别名发出"unused type alias"警告
- 在代码中抑制"unused parameter"警告
- 从C++中删除"unused variable"警告
- 消除QGraphics生成的"unused parameter 'widget'"警告的干净方法项目::p aint