日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]移植 gcc 代碼到 VS2008 時(shí),犯了一個(gè)關(guān)于類型強(qiáng)制轉(zhuǎn)換符 與 + 符的優(yōu)先級(jí)錯(cuò)誤。共有的示例代碼如下(也就是問(wèn)題的條件):char?cArrayTest[10]; unsigned?shor

移植 gcc 代碼到 VS2008 時(shí),犯了一個(gè)關(guān)于類型強(qiáng)制轉(zhuǎn)換符 與 + 符的優(yōu)先級(jí)錯(cuò)誤。

共有的示例代碼如下(也就是問(wèn)題的條件):

char?cArrayTest[10];
unsigned?short?*pusTest?=?NULL;
unsigned?short?*pusTest2?=?NULL;

for(int?i?=?0;i?<?10;i++)
{
	cArrayTest[i]?=?i?+?1;


gcc 的原始代碼如下示例:

pusTest?=?cArrayTest;
pusTest2?=?cArrayTest?+?2;


C 編譯器對(duì)下面的兩句可以正常編譯。
VS2008 的編譯器會(huì)報(bào)錯(cuò),必須強(qiáng)制類型轉(zhuǎn)換。


當(dāng)時(shí)也未多考慮,直接在前面增加了強(qiáng)制類型轉(zhuǎn)換符,修改后的代碼如下:

pusTest?=?(unsigned?short?*)cArrayTest;
pusTest2?=?(unsigned?short?*)cArrayTest?+?2;


本來(lái)是 pusTest2 想取 cArrayTest 的第三和第四個(gè)字節(jié)來(lái)組成一個(gè) unsigned short 的數(shù)值。
但實(shí)際上上面的代碼 pusTest2 取得的是 cArrayTest 的第 5 和第 6 個(gè)字節(jié)所組成的 unsigned short 的數(shù)值。
由于 pusTest2 在后繼的使用時(shí)比較隱蔽,代碼又無(wú)法調(diào)試,所以導(dǎo)致出錯(cuò)問(wèn)題后很久未發(fā)現(xiàn)問(wèn)題的原因。


最后才懷疑到此句:

pusTest2?=?(unsigned?short?*)cArrayTest?+?2;


查了一下,強(qiáng)制類型轉(zhuǎn)換或的優(yōu)先級(jí)果然高于 + 符。

pusTest2?=?(unsigned?short?*)(cArrayTest?+?2);


才是想要的結(jié)果。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉