带参数的主函数——C语言

今天在看《操作系统基础》的时候见到了一段带参数的主函数,之前一直没有了解过带参数的主函数,于是查了点资料。
代码如下:

1
2
3
4
5
#include<stdio.h>
int main(int argc,char *argv[])
{
printf("ECHO:%s\n",argv[1]);
}

这是一段输出功能的程序,若将此编译为output
在shell下,输入

1
./output aaa

则输出ECHO:aaa


ARGc和ARGv中的ARG指的是”参数”(外语:ARGuments, argument counter 和 argument vector ) (百度百科

部分编译器允许将main()函数返回类型声明为void,这已不是合法的C++
搜集了一下C和C++中常见的形式如下:
1
2
3
4
5
6
7
8
9
(1) main()   
(2) int main()
(3) int main(void)
(4) int main(int,cha r**)
(5) int main(int,char *[])
(6) int main(int argc,char **argv)
(7) int main(int argc,char *argv[])
(8) int main(int argc,char *argv[],char *envp[])
(9) void main(void)

(1)是(3)的简写。不推荐使用。
(2)是(3)的简写。在C++中是正确的形式。
(3)在C和C++中都是正确的形式。推荐使用。(还有缺省int的main(void)形式)。
(4)和(5)是不用参数时的一种写法。编译器级别高时会警告。不推荐使用。
(6)是(7)的另外写法。两种都可以,凭个人爱好。
(7)是带参数的正确的形式。推荐使用。
(8)是一种很少用的写法,且受系统限制。
(9)一般不认为是正确的写法。但是在嵌入式系统中有使用(包括void main()形式)


1
2
3
4
5
6
7
8
main(int argc, char *argv[ ], char **env)才是UNIX和Linux中的标准写法。 
argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数
* argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数
argv[0] 指向程序运行的全路径名
argv[1] 指向在DOS命令行中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
...
argv[argc]为NULL。

**env:字符串数组。env[ ]的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量,value 为ENVVAR的对应值。
argc, argv,env是在main( )函数之前被赋值的,编译器生成的可执行文件,main( )不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关。 ​