main()函数是C应用程序的入口点,编译后的可执行文件都是从main函数开始执行的。在执行过程开始时,会执行main()函数,在main()函数执行完毕时,执行过程就结束了。
主函数main()可以有或没有参数列表,通常最多支持3个参数。
1.int main()
2.int main(int argc, char *argv[])
3.int main(int argc, char **argv)
4.int main( int argc, char *argv[] , char *envp[])
上述的1,2,3比较常用,第4种用法比较少见。
main()函数一般用int或者void形的。用int型定义main更好些,因为在结束的时候可以返回给操作系统一个值以表示执行情况。
下面介绍一下main函数各个参数的含义:
1.int argc
表示在命令行下输入命令的时候,一共有多少个参数。例如:
./test arg1 arg2
那么argc的值是3,命令名加上两个参数,一共三个参数。argc代表参数的数量, main()函数本身是在索引0为的第一参数。 所以, argc总是至少为1 。
2.char *argv[]
输入参数数组,真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。argv[0]存放可执行程序本身。
例如:
./test
argc的值是1,argv[0]的值是 "test"
./test arg1 arg2
argc的值是3,argc[0]的值是"test",argc[1]的值是" arg1 ",argc[2]的值是" arg2"。
3.char *envp[]
相对来说用得比较少,它是用来取得系统的环境变量的。Envp是编译器扩展地语法,标准是不支持的,虽然现在很多编译器都支持,但是考虑到程序的移植性更好,进行避免使用。要获得环境变量的值还是用getenv比较好。
Linux的环境变量可以通过env命令察看,通过setenv 或export进行设置。例如:
$ env
PATH=/home/global/Linux-x86_64-rhel4/bin:/home/global/unknown/bin:/home/tools/infra/SGE/bin/lx24-amd64:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
SHELL=/bin/tcsh
SSH_CLIENT=::ffff:10.101.0.131 49427 22
SSH_CONNECTION=::ffff:10.101.0.131 49427 ::ffff:10.101.0.119 22
SSH_TTY=/dev/pts/1
TERM=xterm
HOSTTYPE=x86_64-linux
VENDOR=unknown
OSTYPE=linux
MACHTYPE=x86_64
SHLVL=1
GROUP=users
HOST=sclab-19
下面的例程,演示了arg的使用和含义。
/* argtest.c */
#include<stdio.h>
int main(int argc, char *argv[], char *envp[])
{
int i;
printf("You have inputed total %d argments/n", argc);
/* argv */
for (i = 0; i < argc; i++)
{
printf("/targ%d is : %s/n", i, argv[i]);
}
/* envp */
printf("This is enviroment info:/n");
for (i = 0; envp[i] != NULL; i++)
{
printf("/t%s/n", envp[i]);
}
return 0;
}
$ gcc -g argtest.c -o argtest
$ ./argtest this is arg test
You have inputed total 5 argments
arg0 is : ./argtest
arg1 is : this
arg2 is : is
arg3 is : arg
arg4 is : test
This is enviroment info:
….
PATH=/home/global/Linux-x86_64-rhel4/bin:/home/global/unknown/bin:/home/tools/infra/SGE/bin/lx24-amd64:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
….