我正在查看一段C++代码,主函数的第一行引起了我的注意:
int main(int argc, const char* argv[]) {
(void)argc; (void)argv;
...
}
除此之外,程序中的 argc 和 argv 完全没有被使用。作者为什么要进行无类型转换?这是为了防止编译器抱怨未使用的变量吗?
我正在查看一段C++代码,主函数的第一行引起了我的注意:
int main(int argc, const char* argv[]) {
(void)argc; (void)argv;
...
}
除此之外,程序中的 argc 和 argv 完全没有被使用。作者为什么要进行无类型转换?这是为了防止编译器抱怨未使用的变量吗?
"这是为了防止编译器抱怨未使用的变量吗?"
是的。
-Werror
选项,编译器会将所有警告转换为错误,并停止编译。最好的做法是设置-Wall -Werror
来检查所有不一致性。-Wall
(或许加上-Wextra
)是一个好的实践,但我对-Werror
的效果不太确定。有极少数情况下,可能需要跳过-Wall
给出的特定警告(但这时你应该在注释中解释为什么要这样做)。 - Basile Starynkevitch是的,这是为了防止编译器抱怨未使用的变量。在这种情况下,更好的方法是:
int main(int, char**) {
...
}
int main()
。编译器警告问题解决了! - Christian Rau