我正在学习 C,但还是有点新手,但我正在学习一些类(class),我收到关于重复“const”声明说明符的编译器警告。
违规行是;
int main(int argc, const char const *argv[])
除非我严重误解了 const 在参数定义中的工作方式,因为 argv 是我需要使用的数组;
int main(int argc, const char const **argv)
或许
int main(int argc, const char *argv[])
编译器不会提示这两个选项中的任何一个,如果我的想法是正确的,那么这两个选项应该会产生相同的结果,因为 *argv[] 是一个指向数组的指针。我意识到如果 argv 不是数组,它们会有不同的含义,但在这种特殊情况下,它们产生相同的结果并且它们是与原始声明相反的正确声明,我错了吗?
最佳答案
在这一行中:
int main(int argc, const char const *argv[])
你写了两次const
。一般来说,这是 C 标准允许的,但看起来你的编译器是友好的并且无论如何都会发出警告。您可以忽略或禁用此警告,或删除其中一个 const
。
然而,main
是特殊的:在这里使用 const
是非标准的。应该是:
int main(int argc, char *argv[])
编译器可能接受也可能不接受带有const
的版本。它们是否这样做是实现定义的,这意味着编译器的文档应该有一个页面讨论它接受哪些 main
的签名。
关于const char const *char[] 编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35465375/