GNU
http://blog.chinaunix.net/uid-25768133-id-3485479.html
跨平臺的三個主要問題:
[1] 字節序:Linux低字節在前。系統中,有ntohXXX(), htonXXX()等函數,負責將數據在網絡字節序(高字節在前)和本地字節序之間轉換。
[2] 變量長度: short int long long long ptr time_t
32位 2 4 4 8 4 4
64位 2 4 8 8 8 8
[3] 內存對齊:GNU C的一大特色就是__attribute__機制。__attribute__可以設置函數屬性(Function Attribute)、變量屬性(Variable Attribute)和類型屬性(Type Attribute)。
GNU CC需要使用 –Wall編譯器來擊活該功能,這是控制警告信息的一個很好的方式
__attribute__ ((attribute-list))
其位置約束為:放於聲明的尾部“;”之前。
變量後面加上“__attribute__ ((packed));“則結構體就會以字節對其,域以位對其;__attribute__ ((aligned(4)));則以4字節對其”
對於函數:
__attribute__((noreturn))表示這個函數沒有返回值也不能有返回值
__attribute__((nonnull(1,3))) 第1和3參數不能為空
KEIL下的GNU:
除了上面的設定還需要生成BIN和AXF目標文件(proteus或者Jscope都需要改文件),方法是在after build/rebuild的#RUN1後面按下面指定並打鉤
GNU