|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
typedef __packed struct的問(wèn)題 |
| 作者:modaming 欄目:嵌入式系統(tǒng) |
typedef __packed struct READ_Command { u_char code; u_int addr; u_char len; } READ_Command; 與 typedef struct READ_Command { u_char code; u_int addr; u_char len; } READ_Command; 的區(qū)別是什么。 |
| 2樓: | >>參與討論 |
| 作者: modaming 于 2005/1/10 12:06:00 發(fā)布:
re:typedef __packed struct的問(wèn)題 應(yīng)該是這樣: typedef __packed struct READ_Command { u_char code; u_int addr; u_char len; } READ_Command; 與 typedef struct { u_char code; u_int addr; u_char len; } READ_Command; 的區(qū)別是什么啊? |
|
| 3樓: | >>參與討論 |
| 作者: figos 于 2005/1/10 13:51:00 發(fā)布:
沒(méi)有__packed的會(huì)出現(xiàn)字對(duì)齊等 也就是,CHAR型的有可能是占用4個(gè)字節(jié)的長(zhǎng)度的內(nèi)存空間 有__packed 的就不會(huì),就肯定是1個(gè)字節(jié)的內(nèi)存空間 |
|
| 4樓: | >>參與討論 |
| 作者: iamatyro 于 2005/1/10 22:35:00 發(fā)布:
請(qǐng)問(wèn) 這個(gè)__packed 是關(guān)鍵字還是什么數(shù)據(jù)類型?是C還是C++的?我覺(jué)得沒(méi)有見過(guò). 有人能指點(diǎn)嗎? |
|
| 5樓: | >>參與討論 |
| 作者: figos 于 2005/1/12 13:14:00 發(fā)布:
gcc編譯器的關(guān)鍵字 |
|
| 6樓: | >>參與討論 |
| 作者: iamatyro 于 2005/1/12 19:46:00 發(fā)布:
謝謝樓上 謝謝樓上的指點(diǎn)! |
|
| 7樓: | >>參與討論 |
| 作者: iamatyro 于 2005/1/12 20:01:00 發(fā)布:
另 經(jīng)常看到有 _xxx _或 __xxx 的一類變量,總是感覺(jué)這樣定義一個(gè)變量好象與不加前綴"_"及"__"的變量定義不一樣,而是有一些特殊的意味,但我是一個(gè)菜鳥不能深解,還望大蝦指教! |
|
| 8樓: | >>參與討論 |
| 作者: happyfeng 于 2005/1/16 21:07:00 發(fā)布:
注意 _packed只是某種編譯器的格式壓縮,有的是pack呢,對(duì)不同的CPU壓縮的對(duì)齊方式也不一樣 |
|
| 9樓: | >>參與討論 |
| 作者: 太陽(yáng)草 于 2005/1/18 0:11:00 發(fā)布:
我想再請(qǐng)問(wèn)一下 figos說(shuō)的“CHAR型的有可能是占用4個(gè)字節(jié)的長(zhǎng)度的內(nèi)存空間” 可否幫我舉個(gè)例子,在什么情況下占用4個(gè)字節(jié)呢,我沒(méi)遇見過(guò)呢。 謝謝~! |
|
| 10樓: | >>參與討論 |
| 作者: figos 于 2005/1/18 13:08:00 發(fā)布:
vc下 在VC下如果定義一個(gè) typedef struct { u_CHAR code; u_int addr; u_CHAR len; } READ_Command; 則由于其默認(rèn)是4個(gè)BYTE對(duì)齊,所以code和len將占用一個(gè)字節(jié)空間,當(dāng)會(huì)耗掉4個(gè)字節(jié)空間(3個(gè)字節(jié)沒(méi)有),所以我就說(shuō)“占4個(gè)字節(jié)空間”,可能會(huì)誤道人,不好意思。 在gcc下我想也會(huì)出現(xiàn)同樣的情況。 >我想再請(qǐng)問(wèn)一下 > >figos說(shuō)的“CHAR型的有可能是占用4個(gè)字節(jié)的長(zhǎng)度的內(nèi)存空間” >可否幫我舉個(gè)例子,在什么情況下占用4個(gè)字節(jié)呢,我沒(méi)遇見過(guò)呢。 >謝謝~! |
|
| 11樓: | >>參與討論 |
| 作者: jacksting 于 2005/1/19 19:56:00 發(fā)布:
不止vc下面 32位的系統(tǒng)里面的內(nèi)存數(shù)據(jù)的存取是32位的,處理的時(shí)候都是4個(gè)字節(jié)為單位,通常也就是int的長(zhǎng)度。如果不定義壓縮方式,也就是編譯選項(xiàng)沒(méi)有諸如#pragma pack(1)之類的,那么系統(tǒng)會(huì)進(jìn)行4字節(jié)對(duì)齊。 typedef struct { u_char code;/*占了4個(gè)字節(jié)*/ u_int addr; u_char len; } READ_Command; READ_Command *ptCli; 如果這個(gè)指針指向了網(wǎng)絡(luò)接收來(lái)的數(shù)據(jù),那么ptCli->len很可能就不是你要的了。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號(hào) |