一、问题
在使⽤⼀些开发⼯具⽣成C语⾔⽂件时,主函数 mian( ) 中会有参数,这个参数到底是怎么回事⼉呢?
二、解答
mian( ) 称为主函数,是所有程序运⾏的⼊口。 mian( ) 函数是由系统调⽤的,当处于操作命令状态下,输⼊ mian( ) 所在的⽂件名,系统就调⽤ mian( ) 函数。
我们经常对 mian( ) 函数始终作为主调函数处理,即允许 mian( ) 调⽤其他函数并传递参数。事实上, mian( ) 函数既可以是⽆参函数,也可以是有参函数。对于有参的形式来说,就需要向其传递参数。
那么, mian( ) 函数的形参的值从何处得到呢?由于其他任何函数均不能调⽤ mian( ) 函数,不能调⽤⾃然也就⽆法向 mian( ) 函数传递参数,只能由程序之外传递⽽来。这个具体的问题怎样解决呢?下⾯先看⼀下 mian( ) 函数的带参的形式:
main(int argc,char *argv[])
从函数参数的形式上看,包含⼀个整型和⼀个指针数组。当⼀个C的源程序经过编译和链接后,会⽣成扩展名为.exe 的可执⾏⽂件,这是可以在操作系统下直接运⾏的⽂件。 对于 mian( ) 函数来说,其实际参数和命令是⼀起给出的,也就是在⼀个命令⾏中包括命令名和需要传给 main 函数的参数。命令⾏的⼀般形式为:
命令名 参数1 参数2...参数n。
命令⾏中的命令就是可执⾏⽂件的⽂件名,其后所跟参数需⽤空格分隔,并作为对命 令的进⼀步补充,也即是传递给 mian( ) 函数的参数。命令⾏与 mian( ) 函数的参数存在如下的关系。
设命令⾏为:
file1 strl str2 str3
其中 file1 为⽂件名,也就是⼀个由 file1.c 经编译和链接后⽣成的可执⾏⽂件 file1.exe, 其后各跟3个参数。以上命令⾏与 mian( ) 函数中的形式参数关系如下。
它的参数 argc 记录了命令⾏中命令与参数的个数(file1、str1、str2、 str3),共4个, 指针数组的⼤⼩由参数的值决定,即为 char *argv[4],该指针数组的取值情况如图所示。
输出 main( ) 函数参数内容。
#include <stdio.h>
main(int argc, char *argv[])
{
printf("The list of parameter:\n");
while (argc > 1)
{
++argv;
printf("%s\n", *argv);
--argc;
}
}
输⼊内容如下所示
Microsoft Windows [版本 5.2.3790]
〈C〉 版权所有 1985-2003 Microsoft Corp.
C:\Docunents and Settings\Administrator>d:tc\0720 hello mingri I love China
程序运⾏结果如下所示
Invalid keyboard code specified
The list of paraneter:
hello
mingri
love
China
C:\DOGUME~1\ADMINI~1)
三、总结
对于⼀般程序的开发,我们不会去关⼼ main( ) 函数的参数,有时开发⼯具会⾃动⽣成, 有时会⼿动删除,这些内容在程序编译时系统会⾃动进⾏相应的设置。