《Linux设备驱动可开发技术及应用》这本书看了得有一个礼拜了,今天看完第十章 程序一般同时包含head dev app,越来越综合 也更容易看书我不懂的地方,怕查过之后又忘 在博客记录一下
主要问题还是在Linux C上,有些函数或者宏还看不出细节。以后第一眼看不出细节的就记下来 今天只记了不懂的关键字,日后加上宏可能条理会清晰些。
一、void指针:
- (Void *)&XXXX 和 (const void *) XXXX
查了半天貌似不是什么高端语句 就是:指针地址指向XXXX地址,括号的只是作用是确定结合顺序。用来说明是是空类型的指针 目的是数据类型更广 易于赋值。
二、break语句:
以前一直以为break“跳出当前语句”的意思是跳出上述的if,今天查了下谭浩强的书;
改正为:if为真时执行break跳出while,为假时执行if语句下的仍在while中的语句
(原来认为的错误理解:××此时的if如果是真 顺序进行到下一条,如果if为假 则执行break、break的结果是去执行whlie的下一条语句。××)
三、__attribute__语句:
- typedef struct
-
{
-
... ...
-
}__attribute__ ((packed)) XXXX;
语法格式为:__attribute__ ((attribute-list)) 其位置约束为:放于声明的尾部“;”之前。
packed
使用该属性对struct或者union类型进行定义,设定其类型的每一个变量的内存约束。当用在enum类型定义时,暗示了应该使用最小完整的类型(it indicates that the smallest integral type should be used)。
下面的例子中,my-packed-struct类型的变量数组中的值将会紧紧的靠在一起,但内部的成员变量s不会被“pack”,如果希望内部的成员变量也被packed的话,my-unpacked-struct也需要使用packed进行相应的约束。
- struct my_unpacked_struct
-
{
-
char c;
-
int i;
-
};
-
-
-
struct my_packed_struct
-
{
-
char c;
-
int i;
-
struct my_unpacked_struct s;
-
-
}__attribute__ ((__packed__));
还有个用法类似packed
使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是一字节对齐,对域(field)是位对齐。下面的例子中,x成员变量使用了该属性,则其值将紧放置在a的后面:
- struct test
-
{
-
char a;
-
int x[2] __attribute__ ((packed));
-
};
其它可选的属性值还可以是:cleanup,common,nocommon,deprecated,mode,section,shared,tls_model,transparent_union,unused,vector_size,weak,dllimport,dlexport等,
详细信息可参考:
__attribute__的博客简介:
阅读(1371) | 评论(0) | 转发(0) |