星光灿烂

C元素

char 类型的符号

 我们都知道,C语言中的基本数据类型都分为 有符号型,和无符号型, 分别用signed  和 unsigned 来表示。一般情况下, 对于有符号类型, 声明时可以省略掉前面的signed,  int i 等价于 signed int i. 星星一直以为所有数据类型,在所有的情况都适用此省略规则,直到前两天在ADS上编译一段程序时遇到了一个“灵异的问题“:

定义了一个变量  char ch = -5 ; 可以是编译器却给出了警告, 并且其后的代码中 if( ch < 0 ) 结果为假! 这段代码在vc上面编译是没有问题的。 后来在网上查了一些资料,原来是这样: 对于 char ch 这样的定义 C语言标准并没有强制规定它的是一个有符号数还是无符号数,不同的编译器可以有不同的实现。ADS 认为 char ch 是要定义一个无符号数即 unsigned ch = -5 ,所以会给警告,并且后续的代码工作不正常, 而vc默认 char 为 signed char, 所以没有问题。


解决方法

1. 使用自己定义的数据类型, 在不同平台上只需要重新编译代码


#if defined ( ADS )
typedef signed char CHAR;
#else
typedef char CHAR;
#endif

2. 修改编译器设置

VC可以使用 /J 指令将默认的char类型定义成 unsigned char
ADS 可以使用 --signed_chars 参数来将默认的 char 类型定义为 signed char


3. 除非必要,不要使用 char 类型



posted on 2007-08-09 17:00 菌子 阅读(1278) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(8)

随笔分类

随笔档案

令一片星空

搜索

最新评论

阅读排行榜

评论排行榜