码迷,mamicode.com
首页 > 其他好文 > 详细

main函数的真正形态

时间:2014-07-17 10:25:35      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:应用程序   main   真实形态   

我们以前经常会用到像 int main()这样的形式,但是main函数的完全体究竟长什么模样呢?

下面这个main函数的形式可能有些出乎我们的意料:

int main(int argc, char *argv[], char *envp[])

它可能与绝大多数教科书上描述的都不一样,但实际上,这才是main函数真正完整的形式。

参数argc指出了运行该程序时命令行参数的个数,数组argv存放了所有的命令行参数,数组envp存放了所有的环境变量。环境变量 指的是一组值,从用户登录后就一直存在,很多应用程序需要依靠它来确定系统的一些细节,我们最常见的环境变量是PATH,它指出了应到哪里去搜索应用程 序,如/bin;HOME也是比较常见的环境变量,它指出了我们在系统中的个人目录。环境变量一般以字符串"XXX=xxx"的形式存在,XXX表示变量 名,xxx表示变量的值。

值得一提的是,argv数组和envp数组存放的都是指向字符串的指针,这两个数组都以一个NULL元素表示数组的结尾。

我们可以通过以下这个程序来观看传到argc、argv和envp里的都是什么东西:

/* main.c */
int main(int argc, char *argv[], char *envp[])
{
	printf("\n### ARGC ###\n%d\n", argc);
	printf("\n### ARGV ###\n");
	while(*argv)
		printf("%s\n", *(argv++));
	printf("\n### ENVP ###\n");
	while(*envp)
		printf("%s\n", *(envp++));
	return 0;
}

编译它:

$ cc main.c -o main

运行时,我们故意加几个没有任何作用的命令行参数:

$ ./main -xx 000
### ARGC ###
3
### ARGV ###
./main
-xx
000
### ENVP ###
PWD=/home/lei
REMOTEHOST=dt.laser.com
HOSTNAME=localhost.localdomain
QTDIR=/usr/lib/qt-2.3.1
LESSOPEN=|/usr/bin/lesspipe.sh %s
KDEDIR=/usr
USER=lei
LS_COLORS=
MACHTYPE=i386-redhat-linux-gnu
MAIL=/var/spool/mail/lei
INPUTRC=/etc/inputrc
LANG=en_US
LOGNAME=lei
SHLVL=1
SHELL=/bin/bash
HOSTTYPE=i386
OSTYPE=linux-gnu
HISTSIZE=1000
TERM=ansi
HOME=/home/lei
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/lei/bin
_=./main

我们看到,程序将"./main"作为第1个命令行参数,所以我们一共有3个命令行参数。这可能与大家平时习惯的说法有些不同,小心不要搞错了。

最后是一句我喜欢的话

一个人总要走陌生的路,看陌生的风景,听陌生的歌,然后在某个不经意的瞬间,你会发现,原本费尽心机想要做的事,不知不觉中你已然能够从容面对了。

main函数的真正形态,布布扣,bubuko.com

main函数的真正形态

标签:应用程序   main   真实形态   

原文地址:http://blog.csdn.net/u010484477/article/details/37899759

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!