2

出于编码 IDE 的限制,我总是这样编写我的 main 函数:

int main(int argc, char* argv[])

但是在 IDE 中,它们以 hello world 类型的应用程序结构开始,我已经看到它以不同的方式编写。例如在 Xcode 中,它有 argv 作为常量:

int main(int argc, const char * argv[])

我还看到人们将 argv[] 声明为双指针,我无法理解以下原因:

int main(int argc, char** argv)

是否有任何标准或约定如何声明?我应该有一个双指针还是一个常量?

额外的问题:表示指针的星号应该放在数据类型之后,就在变量名之前还是在中间分开?

4

2 回答 2

2

是否有任何标准或约定如何声明?我应该有一个双指针还是一个常量?

这在 C++ 标准中有明确定义。

参考:
C++03 第 3.6.1 节:

第 2 段:

它的返回类型应该是 int,否则它的类型是实现定义的。所有实现都应允许以下两种 main 定义:

int main() { /* … */ }

and 

int main(int argc, char* argv[]) { /* … */ }

在后一种形式中,argc 是从程序运行的环境传递给程序的参数数量。如果 argc 不为零,则应在 argv[0] 到 argv[argc-1] 中提供这些参数作为指向以空字符结尾的多字节字符串 (NTMBS) (17.3.2.1.3.2) 的初始字符的指针,并且 argv[0] 应为指向 NTMBS 的初始字符的指针,表示用于调用程序的名称或“”。argc 的值应为非负数。argv[argc] 的值应为 0。 [注意:建议在 argv 之后添加任何其他(可选)参数]

于 2012-04-28T17:57:08.513 回答
0

我相信各种标准都说 argv 不是 const。现在,如果您的应用程序没有修改 argv,那么您没有理由不能将其声明为 const。

于 2012-04-28T17:57:53.783 回答