C/C++ main argc argv

main函数

main函数是C语言和C++ 程序的入口,C和C++ 的标准要求它们的实现必须支持以下两种形式:

1
2
int main(void) {...}
int main(int argc, char* argv[]){...}

任何C和C++ 库实现都必须实现以上两种形式的main,除此以外,可以根据标准进行其他扩展实现,但是这样子可能在一个平台上能运行的程序在另一个平台上不能运行,即除了标准的两种main,其他扩展都是不可移植的。
需要注意的一点是,C和C++ 标准对于main的扩展有要求,C++ 标准要求所有的main都必须返回int类型,只有它们的参数可以改变。而C要自由一些,可以有void main(char, dobule)的实现,但是在C++ 标准中这是不支持的。int main(int ,char*, char**)在C和C++ 标准中都是允许的。

main函数示例

假设有一个名为prog的可执行文件,其中包含一个main函数,可以通过命令行选项向程序传递参数:

1
prog -d -o file data0

这些参数通过两个形参argcargv传递给main函数。形参argv是一个数组,数组元素是字符串指针,即argv是一个C风格字符串指针数组。而argc表示的是字符串数组的长度。
当一个实参传递给main函数之后,argv的第一个元素指向程序的名字或者一个空字符串,接下来的元素依次存放命令行提供的实参。最后一个指针指向的元素应该保证为0。
注意,当使用argv中的实参时,注意argv[0]保存的是程序名字或者空字符串,可选的实参从argv[1]开始。

参考文献

1.《C++ Primer第五版》
2.https://stackoverflow.com/questions/9554513/c-main-vs-c-main
3.《你必须知道的495个C语言问题》