最近在看linux的程序,有一个问题一直没搞明白:就是主函数的参数是如何传递的!比如有这么一段程序:
int main(int a, char* b[])
{
char *t=".";
if (a>=2)
t=b[1];
printf("Directory scan of %s\n",t);
exit(0);
}
假设把这段函数加上头文件后编译生成hello(可运行文件),然后就
./hello /usr/local
然后底下输出就是
Directory scan of /usr/local
这里的参数是怎么传递的呢?
哪位大大能详细解释一下?或者说有现成的资料最好!网上找了找,满大街都是java的


wucongdonglai 于 2010-10-28 11:23:23发表:
10# deepwhite
恩,也是,像copy,如果不传递给它参数的话,很难实现的!只是在图形化界面下都被隐藏掉了!不过我记得好像是哪本编程书还是还是编程思想上说:的确不建议给主函数传递参数,因为我当时学完谭的C语言后,刚开始接触编程,我还有过想法说:函数调用都是传递参数的,为什么主函数不给参数?所以对这个印象很深刻
deepwhite 于 2010-10-28 09:12:53发表:
呵呵, 错觉, Windows 下面也有的,比如 Windows 自带的 copy, delete, msiexec 等等工具,他们的参数都应该是这样传的,不会说 “不建议”。只是可能很多的GUI程序没有用这两个东西。
wucongdonglai 于 2010-10-27 16:16:17发表:
7# deepwhite
恩,是《linux程序设计》这里看的,一般的windows下的编程都看不到这东东的,好像也不建议给主函数传参数
wcj1123zouhua 于 2010-10-27 09:41:14发表:
继续努力学习
deepwhite 于 2010-10-27 09:11:46发表:
你得到的解释应该是一本标准C语言教程中给出的解释。我还以为你问的是他们是怎么实现和调用的呢,才让你看看内核,我想复杂了。
gobeta 于 2010-10-26 14:58:49发表:
路过
wucongdonglai 于 2010-10-26 14:45:33发表:
2# shenhao0129
原来是这样的:终于明白了我:
一般申明如int main(int argc, char* argv[])
argc是指参数的个数,argv是指参数的字符串数组,其中包括程序名自身
比如函数名如hello,在shell下输入hello left right 'and me'
main()中带的参数就是
argc:4
argv:{'hello' 'left' 'right' 'and me'}
另外,linux的shell一般会设置argc和argv前对文件名参数进行通配符扩展
对此我还真小白啊,以前在windows下就没考虑过这个问题,哎
wucongdonglai 于 2010-10-26 14:30:36发表:
3# deepwhite
恩,就是因为看内核的源码嘛,所以才有这问题!
deepwhite 于 2010-10-26 14:09:14发表:
你前一阵不是看了内核么?想想内核的进程管理那部分, sys_fork() 的实现。
shenhao0129 于 2010-10-26 12:20:06发表:
前面一个是个数,后面一个是参数的地址