参数 argc 和 argv 的无效强制转换

15

我正在查看一段C++代码,主函数的第一行引起了我的注意:

int main(int argc, const char* argv[]) {
    (void)argc; (void)argv;
     ...
}

除此之外,程序中的 argc 和 argv 完全没有被使用。作者为什么要进行无类型转换?这是为了防止编译器抱怨未使用的变量吗?


2
虽然在这种情况下,作者应该只使用int main()。编译器警告问题解决了! - Christian Rau
3
请注意,main函数不需要使用这些参数,如果您不使用它们,可以将其省略。另外,至少VC++2005不会警告参数没有名称(如果您需要保留签名的话)。 - Björn Pollex
1
这可能是因为对参数将来某些用途的想法。 - Kiril Kirov
1
可能是将未使用的返回值强制转换为void的重复问题。 - Nawaz
1
@Nawaz:这确实是一个重复的问题,但不是你链接的那个问题,那个问题是关于返回值的(void)转换。 - Paul R
显示剩余3条评论
4个回答

19

"这是为了防止编译器抱怨未使用的变量吗?"

是的。


8
是的,这正是告诉编译器不要抱怨未使用的变量。

1
如果您设置了-Werror选项,编译器会将所有警告转换为错误,并停止编译。最好的做法是设置-Wall -Werror来检查所有不一致性。

我认为-Wall(或许加上-Wextra)是一个好的实践,但我对-Werror的效果不太确定。有极少数情况下,可能需要跳过-Wall给出的特定警告(但这时你应该在注释中解释为什么要这样做)。 - Basile Starynkevitch

0

是的,这是为了防止编译器抱怨未使用的变量。在这种情况下,更好的方法是:

int main(int, char**) {
    ...
}

留空参数名称告诉编译器它们存在,但未被使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接