我得到了一些代码并尝试删除给定代码的所有警告。
对于某些功能,如:
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中显示警告。
感谢。
答案 0 :(得分:0)
对于未使用的变量var,您可以使用:
(void)var;
答案 1 :(得分:0)
首先,你为什么评论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 ++仍然可以设置为大喊大叫并不重要)。
答案 2 :(得分:0)
当您遇到警告时,您的第一步(和第二步,可能是第三步)应该是尝试通过解决它来删除它。只有当你真正确定它是假的时候,你才能转向沉默它。
在您的情况下,如果根本不使用ptr1
,请不要声明它。你说删除它会在其他地方引入错误。这意味着obj1
在其构造函数中做了疯狂的事情(比如在某处注册新创建的实例),或者整个代码都是一团糟。如果它是前者,只需删除变量定义,然后将new obj1(xxx);
作为一个参数。但首先使三重确定指针存储在某处,通过new
表达式旁边的注释 。
ptr2
的行甚至不应该按原样编译,因为obj1
是一种类型,你不能将->
应用于它。但我认为你实际上意味着ptr1->xxxx(xxx)
,在这种情况下ptr1
确实被使用,只有ptr2
需要删除 - 只需保留ptr1
,只需替换{{}的声明即可1}}通过电话ptr2
。并确保ptr1->xxxx(xxx);
指向的对象不会泄露。
答案 3 :(得分:0)
避免此警告的方法是定义如下函数:
template <typename T> remove_warning_for_unused_variable(const T&) {}
然后使用它
remove_warning_for_unused_variable(variable);