English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

struct selfid {
u32 packet_identifier:2; /* always binary 10 */
u32 phy_id:6;
/* byte */
u32 extended:1; /* if true is struct ext_selfid */
u32 link_active:1;
u32 gap_count:6;
/* byte */
u32 speed:2;
u32 phy_delay:2;
u32 contender:1;
u32 power_class:3;
/* byte */
u32 port0:2;
u32 port1:2;
u32 port2:2;
u32 initiated_reset:1;
u32 more_packets:1;
} __attribute__((packed));
這個是linux 1394 device driver \"ieee1394.h\" 裡看到的,
看不懂\":\"的寫法
還有 \"__attribute__((packed))\"是什麼意思啊?
謝謝!

2006-08-07 13:32:11 · 3 個解答 · 發問者 barcodecat 1 in 電腦與網際網路 程式設計

再請問各位,":"應該不是標準的C語法吧?是算那一種語法啊?是要include什麼檔案啊?謝謝!

2006-08-07 19:17:18 · update #1

3 個解答

":" 是 bit field
a:b是說:a這個變數要用b個 bits 就好。
這樣,會省記憶體,但程式速度會變慢,程式也會變長。
程式變長〝應該〞不能解決;
但「速度變慢」在資料量大時,有機會反而會快!

__attribute__xxx 是宣告 __attribute__xx 是這個 structucture 的變數。
至於為何它 xxx 是個 (y),這就不知道了。
變數是不能用 () 的;〝除了在 #define 〝函數〞以外〞。

y本身是個 (packed) 〝可能〞是因為 packed 是個 #define 的東東!
但習慣上 #define 的東東是用大寫,它卻用小寫!

這部份您可能要等高手回答了。

2006-08-09 21:52:56 補充:
1. : 是標準的 C 的用法。2. 謝謝 dave,我的確不知道 C 可以設定 alignment ,我一直以為那是只能由 compiler 決定的東東。3. structure 裡的東東不叫關鍵字,它還是叫變數。

2006-08-07 16:50:04 · answer #1 · answered by ? 7 · 0 0

jacob說錯囉,packed attribute 是告訴compiler要如何在記憶體裡配置struct的關鍵字…
struct A
{
char a;
int c;
} __attribute__((packed));

struct B
{
char a;
int c;
};
int main()
{
printf("%d %d", sizeof(struct A), sizeof(struct B));
return 0;
}

2006-08-07 21:14:47 補充:
輸出的答案,數字不一樣,A是5bytes大,B是8byte大,因為alignment的問題…

2006-08-08 17:10:30 補充:
var:num; 是標準的 ANSI bit field 語法… 你要是沒法 compile,應該是前面的 u32 的關係…

http://refcards.com/refcards/c/c-refcard-letter.pdf

2006-08-07 17:13:57 · answer #2 · answered by Dave 7 · 0 0

沒記錯應該是限定跟大小有關的樣子
//不確定

至於下面的問題
這個網址應該可以幫助你
http://www.unixwiz.net/techtips/gnu-c-attributes.html

2006-08-07 13:59:33 · answer #3 · answered by 3 · 0 0

fedest.com, questions and answers