作者dryman (dryman)
看板Programming
標題Re: [請益] C 變數型態 可攜
時間Mon Feb 4 11:02:52 2013
※ 引述《leslieha (懂的付出才會幸福)》之銘言:
: 目前在開發軟體上
: 有遇到一個問題
: 開發語言為 C
: 變數型態大多使用 long short char等
: 專案開發上一旦遇到換 IDE 移植專案時
: 有些 IDE 會自訂一些變數型態
: 例如
: bool, Bool, BOOL
: true, TRUE
: 為避免上述問題
: 自己是不使用 boolean, 改用 char
大部分你用到bool這樣的變數型態時,只要用int就可以了
因為一個int代表的就是一個register
即使你用char,他在進行代數運算或是邏輯比對的時候
還是會做integer promotion
被載入到一個register裡面處理
所以除非你要「儲存」你的bool到一個記憶體中
不然使用int是最直接的(事實上,編譯器可能會直接幫你檢查,並把它變成int)
: 但有時遇到 unsigned long
: 就會有 uint32_t, uint32t, UNIT32_T, UINT32T 這幾種
: 目前自己本身的解決方法是
: 開一個 MyTypeDef.h
: 自己 typedef 變數型態
: 但有時 typdef 的變數型態的名稱
: 就有可能會與 IDE 自訂的發生 redefine的問題
嗯,請不要自己定義header
C99就有stdint.h的這個規範
M$老愛背離規範比較麻煩,但也有解:
Stack overflow:
http://0rz.tw/LYsN3
stdint.h for M$
http://msinttypes.googlecode.com/svn/trunk/stdint.h
關於C的整數型別及integer promotion
小弟我有寫過兩篇專文討論,有興趣的話也可以看看
http://www.idryman.org/blog/2012/12/03/the-design-of-c-integer-types/
http://www.idryman.org/blog/2012/11/21/integer-promotion/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 207.151.58.224
→ leslieha:怕有些IDE沒支援C99, 逼自己只用C89 60.251.160.66 02/05 11:01
→ leslieha:你提醒我int是一個register 60.251.160.66 02/05 11:03
→ leslieha:這樣應該會比用char還快一點.....吧? 60.251.160.66 02/05 11:04
→ leslieha:上面推文怎麼會變反白了 @@ 60.251.160.66 02/05 11:04
→ dryman:有開optimizer一般都會把它優化掉 68.181.4.88 02/06 09:59
→ dryman:其實,唯一沒有支援的IDE就是微軟的 68.181.4.88 02/06 09:59
→ dryman:他們只想推動C++,不想理C 68.181.4.88 02/06 10:00