为什么在c++中int main 后的参数总是int argc, char* argv[]?

如题所述

对程序员来说,main函数是程序的入口点,但是对编译器来说,需要增加附加的初始化代码来处理和操作系统环境有关的东西,诸如命令行参数等,然后再调用main进入用户编写的代码,按照约定,在调用main之前,初始化代码会按照main(int argc, char* argv[])的参数形式将argc,argv放入堆栈,供main中的代码调用。如果main定义成其它参数形式,虽然语法是没有问题,但可能得不到正确的参数。
比如,以下的参数形式多数的编译器能够编译通过
int main() //不需要处理传入参数
int main(int argc) //argc传入参数个数
int main(int argc,char *argv[]) //argc传入参数个数,argv传入命令行字符串数组
int main(int argc, int p) //虽然p定义成整型,但实际传入的仍是命令行字符串数组指针。
int main(int argc, char *argv[], int u) //多了个参数u,前面2项没问题,但对u的存取可能会破坏堆栈。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-01-14
定义主函数
int main(int argc, int **argv)
这样的形式的时候
argv不可能等于NULL
至少有一个运行的程序名。
至于最后一个argv为NULL ,只是部分平台有这个功能
有些是没有的
大多数情况下, 还是要用argc来判断个数。

除此外, 很多程序, 会根据参数的个数实现不同功能, 直接用argc来判断, 比循环遍历argv确定参数总个数要方便的多。
第2个回答  2013-08-08
main 常见的3种形式

void main(void) //这个不标准 VC支持 GCC不支持
int main(void) // 不带输入参数的main形式
int main(int argc, char* argv[]) // 带参数的main形式
argc 是输入参数的个数 argv 是一个字符串数组 代表输入的参数
比如 aa.exe
执行 aa -p -q 那么 argc为3 表示 argv有3个字符串
argv[0] // 是aa.exe的路径
argv[1] //"-p"
argv[2] // "-q"
第3个回答  2013-08-08
两种标准形式之一,其实形参是void也可以,甚至在C++中不写也可(不写等同于void,但是C中不等同)
其实argc和argv的名字可以任意,而且argv也可以写成char** argv的形式,因为实质上都是相同的。
第4个回答  2013-08-08
没有为什么,这是规则,你必须遵守.
就像去ATM取钱要插卡一样,你须插卡输入密码才给钱.
游戏规则定好了,大家都要遵守.
第5个回答  2013-08-08
这个参数可以不要,但最好加上,linux中支持不加,但是在VC中要有返回值才行,比如int main()
相似回答