在学习msOS时,遇到了问题,用法比较新颖,没有见过,所以比较疑惑,在msOS里面有下面这段代码。
- SystemStruct System =
- {
- Init, // 直接初始化Init成员,不需要赋值
- };
复制代码
这里的Init是一个函数的名字,而这里用了这种赋值的方法,我试验过,如果没有这个语句,程序是会出错的,当时我不明白为什么需要这样做,经过多次的请教后和自己的理解后才知道这样有什么作用。
这种赋值的方法,跟数组赋值的方法类似,为什么需要这样做?
第一点:要给System一个实体,不这样做,就没法用System.Init
第二点:SystemStruct结构体里面封装了所有函数的接口,而这个结构体里面的第一个接口void (*Init)(void);是没有赋值的,那么这里的意思就是给这个接口赋值,那么这时候大家就有疑问了,其它的接口不需要赋值吗?答案是,要,但是不是在这里,在设备层里都可看到类似这样的赋值
- System.Device.Key.Enable = EnableKey;
复制代码
所以其它的接口将会在设备初始化的时候赋好值。
那么再做一次总结,这里的作用就是把System变为一个实体,就像你要用一个变量a一样,你首先就得对这个变量定义一个类型一样,然后就是对结构体void (*Init)(void);接口赋值,其它的值不赋值,则是空,因为后面这些值将会再初始化中进行相应的赋值。