《Linux設(shè)備驅(qū)動可開發(fā)技術(shù)及應(yīng)用》這本書看了得有一個禮拜了,今天看完第十章 程序一般同時包含head dev app,越來越綜合 也更容易看書我不懂的地方,怕查過之后又忘 在博客記錄一下
主要問題還是在Linux C上,有些函數(shù)或者宏還看不出細節(jié)。以后第一眼看不出細節(jié)的就記下來 今天只記了不懂的關(guān)鍵字,日后加上宏可能條理會清晰些。
一、void指針: - (Void *)&XXXX 和 (const void *) XXXX
查了半天貌似不是什么高端語句 就是:指針地址指向XXXX地址,括號的只是作用是確定結(jié)合順序。用來說明是是空類型的指針 目的是數(shù)據(jù)類型更廣 易于賦值。
二、break語句: 以前一直以為break“跳出當前語句”的意思是跳出上述的if,今天查了下譚浩強的書; 改正為:if為真時執(zhí)行break跳出while,為假時執(zhí)行if語句下的仍在while中的語句 (原來認為的錯誤理解:××此時的if如果是真 順序進行到下一條,如果if為假 則執(zhí)行break、break的結(jié)果是去執(zhí)行whlie的下一條語句。××)
三、__attribute__語句:
- typedef struct
-
{
-
... ...
-
}__attribute__ ((packed)) XXXX;
語法格式為:__attribute__ ((attribute-list)) 其位置約束為:放于聲明的尾部“;”之前。 packed
使用該屬性對struct或者union類型進行定義,設(shè)定其類型的每一個變量的內(nèi)存約束。當用在enum類型定義時,暗示了應(yīng)該使用最小完整的類型(it indicates that the smallest integral type should be used)。 下面的例子中,my-packed-struct類型的變量數(shù)組中的值將會緊緊的靠在一起,但內(nèi)部的成員變量s不會被“pack”,如果希望內(nèi)部的成員變量也被packed的話,my-unpacked-struct也需要使用packed進行相應(yīng)的約束。 - struct my_unpacked_struct
-
{
-
char c;
-
int i;
-
};
-
-
-
struct my_packed_struct
-
{
-
char c;
-
int i;
-
struct my_unpacked_struct s;
-
-
}__attribute__ ((__packed__));
還有個用法類似packed 使用該屬性可以使得變量或者結(jié)構(gòu)體成員使用最小的對齊方式,即對變量是一字節(jié)對齊,對域(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等, 詳細信息可參考:http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html#Variable-Attributes
__attribute__的博客簡介:GNU C 擴展之__attribute__ 機制簡介
|