操作系统实验指导书,一个 nesC应用程序有三个部份。:一连串的 C 声明和定义,一组接口类型,和一组组件。nesC 应用程序命名环境构造如下:
最外层的全局命名环境,包含三个命名域: 一个 C 变量,一个用于C声明和定义的C 标签命名域,和一个用于组件和接口类型的组件和接口类型命名域。
通常,C声明和定义可以在全局命名环境内部引入自己的嵌套命名域(用于函数声明和定义的函数内部代码段,等等)。
每个接口类型引入一个命名域,用于保存接口的指令或事件。这种命名域是嵌套于全局命名环境的,所以指令和事件定义能影响全局命名环境中的C类型和标签定义。
每个组件引入二个新命名域。规格命名域,嵌套于全局命名环境,包含一变量命名域用于存放组件规格元素。实现命名域, 嵌套于规格命名域,包含一个变量和一个标签命名域。
对于结构,作用范围变量命名域包含组件用以引用其包含组件的名字 (7.1节). 对于模块,作用范围保存作业,以及模块体中的C声明和定义。这些声明,及其它可能引入自己的嵌套在作用范围内的命名域 (比如函数体,代码段等等). 由于这种命名域的嵌套结构,模块中的代码可以访问全局命名环境中的C声明和定义,但是不能访问其他组件中的任何声明或定义.。
构成一个nesC应用程序的C声明和定义,接口类型和组件由一个随选的装载程序决定。nesC 编译器的输入是一个单独的组件K。nesC 编译器首先装载C文件 (第 9.1 节),然后装载组件K(9.2节)。 程序所有代码的装载是装载这两个文件的过程的一部分。nesC 编译器假定所有对函数,指令及事件的调用不以自然的属性 (第 10.3 节) 都发生被装载的代码中(例如., 没有对非自然的函数 " 看不见的 " 调用)。
在装载文件预处理的时候,nesC 定义NESC 符号,用于识别nesC 语言和编译器版本的数字 XYZ。对于nesC , XYZ 至少为110。
装载C 文件,nesC组件及接口类型的过程包括定位对应的资源文件。文件定位的机制不是本参考手册中所要讨论的。要详细了解通用编译器是如何作业的,请阅读《the ncc man page.》
装载 C文件X
如果 X 已经被装载,就不用再做什么。否则, 就要定位并预处理文件 X.h。C宏定义 ( 由 # define和 #undef) 的改变会影响到所有的后面的文件预处理。来自被预处理的文件X.h的 C声明和定义会进入C全局命名环境,因此对所有的后来的 C文件加工,接口类型和组件是有影响的。
2020-04-22 07:32:52
1.18MB
指导书
1