OC集成C/C++代碼的一些隨筆

1.集成C/C++時(shí)的一些項(xiàng)目配置

在引用C/C++代碼時(shí)需要改變項(xiàng)目的編譯方式或改變文件的后綴名。
(1)改變編譯方式:在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并將其設(shè)置為"Objective-C++"。
(2)改變后綴名:把需要使用C/C++代碼的.m文件改為.mm后綴即可。
(3)如要引用采用ObjectC++實(shí)現(xiàn)的靜態(tài)庫(kù),需要改變編譯方式或?qū)⑷我庖粋€(gè).m后綴的文件改名為.mm
上述1、2點(diǎn)指的是引入C/C++源碼,3點(diǎn)指引入.a文件。

2.long類(lèi)型在不同環(huán)境下的不同

OC語(yǔ)言中l(wèi)ong類(lèi)型在32位系統(tǒng)下是4字節(jié),在64位系統(tǒng)下是8字節(jié)。
但是在Windows下不管32位還是64位,long為4字節(jié)。
所以,在引入C/C++代碼時(shí),一定要注意long類(lèi)型。
字節(jié)數(shù)不一致時(shí)有可能會(huì)引發(fā)錯(cuò)誤。

Data Type     ILP32       ILP64     LP64      LLP64
char            8           8        8          8
short           16          16       16         16
int             32          64       32         32
long            32          64       64         32
long long       64          64       64         64
pointer         32          64       64         64

絕大部分64位的Unix,linux都是使用的LP64模型;
64位的Windows使用的是LLP64(long long and point 64)模型

上述內(nèi)容引自:http://blog.csdn.net/xiaofei0859/article/details/5953529

3.有關(guān)結(jié)構(gòu)體32位 64位下的不同對(duì)齊方式

之前查資料時(shí),有一句這樣寫(xiě)道:

除了變量的自身對(duì)齊參數(shù)外,還有一個(gè)對(duì)齊參數(shù),就是每個(gè)編譯器默認(rèn)的對(duì)齊參數(shù)#pragma pack(n),
這個(gè)值可以通過(guò)代碼去設(shè)定,如果沒(méi)有設(shè)定,則取系統(tǒng)的默認(rèn)值。
在windows(32)/VC6.0下,n的取值可以為1、2、4、8,默認(rèn)情況下為8。
在linux(32)/GCC下,n的取值只能為1、2、4,默認(rèn)情況下為4。

上述內(nèi)容引自:http://www.cnblogs.com/dolphin0520/archive/2011/09/17/2179466.html

經(jīng)過(guò)實(shí)踐發(fā)現(xiàn),在Xcode下32位系統(tǒng)時(shí),默認(rèn)為4字節(jié)對(duì)齊,64位系統(tǒng)時(shí),默認(rèn)為8字節(jié)對(duì)齊。
所以在C/C++代碼中,如使用到結(jié)構(gòu)體,一定要格外注意結(jié)構(gòu)體在32位和64位下長(zhǎng)度是否一致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容