周立功博文集锦

周立功博文集锦

ID:43087877

大小:114.01 KB

页数:23页

时间:2019-09-26

周立功博文集锦_第1页
周立功博文集锦_第2页
周立功博文集锦_第3页
周立功博文集锦_第4页
周立功博文集锦_第5页
资源描述:

《周立功博文集锦》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、成功心法(7):如果提高自身的技术修养(1)凡是学过C语言的人都知道main()函数,但未必一定清楚其鲜为人知的“私隐”,下面将为此揭开其神秘的面纱。????对于标准的C语言来说,main是所有C程序中都必须包含的一个函数名字。main()是C程序中第一个要执行的函数,必须通过main()中的函数调用才能执行其它函数。只有当main()执行结束时,整个程序才会执行结束。尽管在逻辑上main()是程序中第一个要执行的函数,但在程序行文上,它不一定是第一个函数。???????main()函数是由程序员自行编写的,但其函数说明符是由语言规定好的。它可以定义成无参函数,详见程序清单1。程序清单??无参

2、数函数intmain(void){????????......}????也可以带有2个特定参数argc与argy,详见程序清单2。程序清单2intmain(intargc,charargy[])函数intmain(intargc,charargy[]){?????......}????argc与argy特定参数名字是由语言预定义的标识符,尽管有些C编译器也允许使用其它的一些参数,但标准C只支持argc与argy。在C语言中,编译器处理main()函数与其它函数的方式基本上是一样的,其区别主要表现在运行时,编译器可以支持argc与argy这2个特殊的参数。????由于计算机仅认识机器码,而不认识

3、C语言中的main()函数,因此必须有一段程序来识别C编译器编译的main()函数并调用它。其实在C语言的标准中,有一个非常重要的概念,那就是环境。????环境是指程序翻译与执行所在的计算背景(或称计算上下文),环境可以分为翻译环境与执行环境2类。对于C程序员来说,一般不必关心翻译环境。而在C语言的标准中,对执行环境的解释大致如下:????执行环境是指程序经过翻译后执行的环境,执行环境与翻译环境可以是同一环境,也可以是不同环境。ANSIC规定了2种执行环境,即独立式执行环境与非独立式执行环境。两者的主要区别在于,独立式执行环境不需要操作系统支持,它实际上是一种裸机执行环境,如洗衣机控制器的微控

4、制器实际上就是这样一种执行环境,而非独立式执行环境则需要操作系统的支持,而用于程序设计的执行环境绝大多数都是非独立式执行环境。ANSIC只规定了独立式执行环境的最小规则,因为这种环境可能千差万别。但ANSIC却仔细地规定了在非独立式环境下程序执行的具体规则,包括程序启动、程序执行与程序终止的规则。????对于执行环境的规则,不开发编译器是不需要详细了解的。但从使用者的角度来看,可以这样理解:执行环境是一个软件(及其所运行的硬件)的集合,这个软件提供了基本的库函数和调用main()函数的方式。对于非独立执行环境来说,C语言程序通常编译成对应操作系统的应用程序(一个文件)。假如C语言程序已经编译成

5、应用程序abc.exe,如果在命令行中输入“abc.exe[参数字符串]”后,那么操作系统将执行以下步骤:*找到abc.exe文件并进行分析;*根据分析的结果将指令和数据加载到内存的指定位置;*将参数字符串存储到特定位置(可能是预处理过的);*根据操作系统的不同,执行一些特定的初始化;*初始化堆栈指针;*将所有的寄存器设置为预定义的值;*执行应用程序的第一条指令。????一般来说,应用程序的第一条指令并不是main()函数的第一条指令。编译器会提供实现参数转换等功能的接口代码,并最终调用main()函数。main()函数也会返回到接口代码,此时接口代码将main()函数的返回值处理为操作系统需

6、要的方式,并按照操作系统给定的方式将结果和控制权提交给操作系统。????对于独立执行环境来说,系统往往是裸机,没有任何软件支持,更不可能访问文件了。其步骤如下:*编译器会一般将C语言程序编译为符合某种格式的目标文件;*通过某种烧录或下载工具将目标文件以系统能识别的方式存储到系统的特定位置;*复位系统,系统执行复位向量指定的第一条指令。????一般来说,系统复位后硬件仅进行了有限的初始化,并不能直接运行main(),还需要一个所谓的“启动代码”,将系统引导到C语言的main()函数。启动代码可能全部由编译器提供,也有可能部分需要用户提供。启动代码的内容大致如下:*初始化堆栈指针;*初始化总线控制

7、器、中断控制器、MMU等必须初始化的硬件;*初始化C运行时库;*可能为main()函数提供参数;*调用main()函数。????对于独立执行环境来说,main()函数是一般不返回的。尽管一些编译器也提供返回处理,但都是为停机、软件复位或调用用户提供的函数。?????其实main()函数与其它函数最大的区别在于main()是根函数。在一个标准的C语言程序(仅调用标准的库函数和自己编写的函数)中,所有

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。