带参数的主函数——C语言
今天在看《操作系统基础》的时候见到了一段带参数的主函数,之前一直没有了解过带参数的主函数,于是查了点资料。
代码如下:1
2
3
4
5
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 | (1) main() |
(1)是(3)的简写。不推荐使用。
(2)是(3)的简写。在C++中是正确的形式。
(3)在C和C++中都是正确的形式。推荐使用。(还有缺省int的main(void)形式)。
(4)和(5)是不用参数时的一种写法。编译器级别高时会警告。不推荐使用。
(6)是(7)的另外写法。两种都可以,凭个人爱好。
(7)是带参数的正确的形式。推荐使用。
(8)是一种很少用的写法,且受系统限制。
(9)一般不认为是正确的写法。但是在嵌入式系统中有使用(包括void main()形式)
1 | main(int argc, char *argv[ ], char **env)才是UNIX和Linux中的标准写法。 |
**env:字符串数组。env[ ]的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量,value 为ENVVAR的对应值。
argc, argv,env是在main( )函数之前被赋值的,编译器生成的可执行文件,main( )不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关。