linux/window下的main函数详解(绝对经典,main的真正样子啊!!!)

来源:互联网 发布:淘宝卖家流量钱包 编辑:程序博客网 时间:2024/05/16 06:38

学过c的朋友写一个简单地主函数,就只是跟main有关的,可能五花八门,不信啊,哈哈,不信你看,如:

1.   int  main()

2.   int main(void)

3.   void main(void)

4.   main()

但是,大家可曾知道main函数的真实面目啊,

有人说:我知道,不就是 :   int    main(int argc,  char * argv[])吗?

oh,NO,也不全是这样,它跟我们以前所看到的一点不一样 ,我们也压根不会想到它其实是这样:


main函数原型:

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

argc:表示我们输入的命令行参数的个数,本身的编译链接后的文件是第一个

            (友情提示:window下的命令行可以在dos下运行,cl是编译链接的整个过程)

              

            由上图可知:Unit.c文件编译链接后的文件,Unit.exe直接在dos中执行后(也就是说后面没有其他参数了,所以argc就是1)

              由上图可知,这回我们添加了一些参数,所以argc也就变成了4。

     

argv[]:本身先是一个字符指针,然后是一个指针数组,argv[0],argv[1]....,都指向一块地址

              这里,它们分别指向后面的参数,然后可以读出地址处存放的内容(如上图所示)


envp[]:同样,首先也是一个字符指针,然后是一个指针数组,它里面存放了当前系统的所有环境变量,环境变量                 指的是一大组字符串,代表系统开始运行时加载一些东西,比如:我们在dos下执行一个命令(ls),系统               就会跑到环境变量的PATH下去,进入目录,查看是否有这个命令,如果有,那么执行,如果么有,提示:               不是内部或外部命令


在window下:

程序1:

#include <stdio.h>#include <conio.h>int main(int argc, char *argv[], char **envp){        int i,j;        printf("argc is %d\n", argc);        for(i = 0; i < argc; i++){                printf("the argv[%d] parmeter is :%s\n", i, argv[i]);        }        printf("Environment:\n");        for(i = 0; envp[i] != NULL ; i++)               printf("%s\n", envp[i]);        return 0;getch();}


我们前面提到,在window下,编译器不能处理命令行程序的,所以我们选用dos,在dos中命令:

cl  ***.c

表示对这个源文件的编译和连接,然后直接生成***.exe的可执行文件

然后,我们通过在dos中运行:Unit.exe    或者   Unit.exe nihao mingtian shijie

可以得到上面提到的图:

当然,还有我们的环境变量


这些就是我们的环境变量了,底下还有好多,由于篇幅原因,就这么写吧!!



LINUX下

main函数和上面提到的(返回值,参数类型,参数个数)是一样的

它们的简单区别就是:两者的编译运行方式不一样,linux下有自己的gcc,相对来说,方便一点



运行结果如下:


可以看出跟window下的都是一样的,

但是值得注意的是,就是参数的类型(argc(int整形),argv[]和envp[](两者都是字符指针行))


最后还应该注意的就是返回值问题:返回为0,表示程序正常退出;返回为非0,表示异常退出,

当然对于不太严谨的有些编译器来说:返回值和参数都是可以省略的,偶尔只是报个错而已,但是对于大部分人来说,不能靠编译器啊,还是的我们养成好习惯啊!!!


0 0