main()函数是每一个程序的开始,它是所有程序的入口,其它的函数都是直接换间接在main()中被调用来发挥作用的。
在程序运行时,编译器会为程序增加启动代码,由启动代码调用main()函数,从而进入程序。因此,启动代码是程序和操作系统之间的桥梁。
main()函数一般情况下有以下三种函数头定义:
1、void main(),无形参,无返回值。
2、int main(),无形参,返回一个int值,返回值用来记录程序状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。
3、int main(int argc,char *argv[]),返回一个int值,用于记录程序状态。带有两个形参:第一个形参是一个int值argc,用来统计命令行总的参数个数。第二个形参是一个指向字符串的指针数组argv[],是程序的路径名称和输入的变量。在系统中使用空格把各个字符串隔开,一般情况下,把程序的路径和名字赋值给argv[0],后面的argv[1]、argv[2]等用来存储输入的变量。
这种方法主要是为了方便修改深入参数,每次修改时,不需要从代码中改变变量值,只要在调试中改动命令参数即可,其具体使用方法如下:
现在我编写了一个很简单的程序,用来演示下int main(int argc,char *argv[])的功能。
#include "iostream"
#include <stdlib.h>
int main(int argc, char ** argv)
{
int i;
printf("argc = %d \n",argc);
for (i=0; i < argc; i++)
printf("这是第%d个参数,为 %s.\n", i+1,argv);
system("pause");
return 0;
}
此时如果直接在VS中运行,效果是这个样子的
可见,此时并没有输入命令,默认情况下argv[0]是用来存放程序的路径和名字,此时argc = 1,程序就只进行了一次读取。
那怎么样来给argc和argv[]赋值呢?有两个方法: 1、cmd命令行 首先对程序进行编译,然后通过命令行输入程序路径和名称+变量,如D:\Test\Test1\Debug\Test1.exe a b,共三个参数,此时,argc会被置为3,D:\Test\Test1\Debug\Test1.exe将会被赋给argv[0],a赋给argv[1],b赋给argv[2]。 运行效果如下:
2、VS中配置命令参数 右击项目打开属性,选择配置属性中的调试,修改其命令参数。
运行效果和上面相同。这里解释下,没有输入命令的情况下,其程序的路径和名字是在VS自动赋给argv[0]的,因此会有刚才的结果。
注意,是存在不包含main()函数一些例外情况。例如在Windows编程中,可以编写一个动态链接库(DLL)模块,这是其他Windows程序可以使用的代码。由于DLL独立的程序,incident不需要main()函数。用于专门环境的程序——如机器人中的控制器芯片——可能不需要main()函数。有些编程环境提供了一个框架程序,改程序调用一些非标准函数如_tmain(),这种情况下,有一个隐藏的main(),它调用t_main()。但是常规的独立程序都是需要main()函数的。
|