主要论点的公约

时间:2012-04-28 17:48:53

标签: c++ conventions

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

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

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

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

我也看到人们将argv []声明为双指针,我无法理解其中的原因:

int main(int argc, char** argv)

是否有任何标准或惯例如何宣布?我应该有双指针还是常量?

奖金问题:星号表示指针是否应该放在数据类型之后,就在变量名之前或在中间分开?

2 个答案:

答案 0 :(得分:2)

是否有任何标准或惯例如何宣布?我应该有一个双指针,还是常量?

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

参考:
C ++ 03Section§3.6.1:

第2段:

  

它的返回类型为int,但其类型是实现定义的。所有实现都应允许以下两个主要定义:

int main() { /* … */ }

and 

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

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

答案 1 :(得分:0)

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