linux/window下的main函数详解(绝对经典,main的真正样子啊!!!)
学过c的朋友写一个简单地主函数,就只是跟main有关的,可能五花八门,不信啊,哈哈,不信你看,如:1. int main()2. int main(void)3. void main(void)4. main()但是,大家可曾知道main函数的真实面目啊,有人说:我知道,不就是 : int main(int argc, char * argv)
学过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();
}
cl ***.c
表示对这个源文件的编译和连接,然后直接生成***.exe的可执行文件
然后,我们通过在dos中运行:Unit.exe 或者 Unit.exe nihao mingtian shijie
可以得到上面提到的图:
当然,还有我们的环境变量
这些就是我们的环境变量了,底下还有好多,由于篇幅原因,就这么写吧!!
LINUX下:
main函数和上面提到的(返回值,参数类型,参数个数)是一样的
它们的简单区别就是:两者的编译运行方式不一样,linux下有自己的gcc,相对来说,方便一点
运行结果如下:
可以看出跟window下的都是一样的,
但是值得注意的是,就是参数的类型(argc(int整形),argv[]和envp[](两者都是字符指针行))
最后还应该注意的就是返回值问题:返回为0,表示程序正常退出;返回为非0,表示异常退出,
当然对于不太严谨的有些编译器来说:返回值和参数都是可以省略的,偶尔只是报个错而已,但是对于大部分人来说,不能靠编译器啊,还是的我们养成好习惯啊!!!
更多推荐
所有评论(0)