从C ++中删除“未使用的变量”警告

时间:2014-05-13 14:07:45

标签: c++ gcc warnings unused-variables

我得到了一些代码并尝试删除给定代码的所有警告。

对于某些功能,如:

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中显示警告。

感谢。

4 个答案:

答案 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以后它是有效的,并且需要一些函数,比如后缀运算符。)

另一个问题是,您永远不会使用变量ptr1ptr2。一旦你使用它们,警告就会消失。如果您根本不打算使用它们,则不应该定义它们,因为它通常是浪费内存(尽管目前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);