作者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
1F:→ leslieha:怕有些IDE没支援C99, 逼自己只用C89 60.251.160.66 02/05 11:01
2F:→ leslieha:你提醒我int是一个register 60.251.160.66 02/05 11:03
3F:→ leslieha:这样应该会比用char还快一点.....吧? 60.251.160.66 02/05 11:04
4F:→ leslieha:上面推文怎麽会变反白了 @@ 60.251.160.66 02/05 11:04
5F:→ dryman:有开optimizer一般都会把它优化掉 68.181.4.88 02/06 09:59
6F:→ dryman:其实,唯一没有支援的IDE就是微软的 68.181.4.88 02/06 09:59
7F:→ dryman:他们只想推动C++,不想理C 68.181.4.88 02/06 10:00