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();}
cl ***.c
表示对这个源文件的编译和连接,然后直接生成***.exe的可执行文件
然后,我们通过在dos中运行:Unit.exe 或者 Unit.exe nihao mingtian shijie
可以得到上面提到的图:
当然,还有我们的环境变量
这些就是我们的环境变量了,底下还有好多,由于篇幅原因,就这么写吧!!
LINUX下:
main函数和上面提到的(返回值,参数类型,参数个数)是一样的
它们的简单区别就是:两者的编译运行方式不一样,linux下有自己的gcc,相对来说,方便一点
运行结果如下:
可以看出跟window下的都是一样的,
但是值得注意的是,就是参数的类型(argc(int整形),argv[]和envp[](两者都是字符指针行))
最后还应该注意的就是返回值问题:返回为0,表示程序正常退出;返回为非0,表示异常退出,
当然对于不太严谨的有些编译器来说:返回值和参数都是可以省略的,偶尔只是报个错而已,但是对于大部分人来说,不能靠编译器啊,还是的我们养成好习惯啊!!!
- linux/window下的main函数详解(绝对经典,main的真正样子啊!!!)
- linux下的main 函数
- 真正的main()函数参数
- main函数的真正形态
- window的入口函数main
- Linux下的main函数的参数
- Linux下main函数参数的解析
- linux 下main() 函数的实际参数
- main函数之前--真正的函数执行入口或开始
- main函数之前--真正的函数执行入口或开始
- main函数之前--真正的函数执行入口或开始
- main函数之前--真正的函数执行入口或开始
- main函数之前--真正的函数执行入口或开始
- main函数之前--真正的函数执行入口或开始
- linux环境下的main函数传递参数的问题
- linux下的C语言带参数的main函数
- Linux平台下基于BitTorrent应用层协议的下载软件开发--Main函数模块(main.c)
- linux下c编程main函数的参数问题
- 浅析Google Guava中concurrent下的Monitor和Future特性
- dosbox更新加载的文件夹
- 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式
- (2016)[SAS数据处理] 利用二分法思想加速DATA步数据截取操作 [v1.02]
- 写博客
- linux/window下的main函数详解(绝对经典,main的真正样子啊!!!)
- 【NYOJ】[122]Triangular Sums
- 内部类调用外部类变量
- 【NYOJ】[125]盗梦空间
- 浅谈HTTP中Get与Post的区别
- Mod31算法的javascript实现
- #Hive#Hive Warning: Value had a \n character in it
- openCV学习记录:滤镜:连环画
- Java 线程间通讯