在读书的时候,就记得char默认表示singned char sizeof(char) = 1,其表示范围:-128~127;当时还写了各种验证程序求各种数据类型的占用字节数已经表示范围,还有各种无符号的数据类型的死循环等问题。写个代码来看下:
这是我主机的架构,下面是代码:
编译运行,sizeof=1, 按照有符号整型输出,c = -1;
到这里一切都没问题。但是这只是在x86平台下。由于我当前手里没有arm架构的平台。所以会验证不了。情况就是,在一些arm平台下,char默认就认为是unsigned char,这就会导致你原先表达的意思可能会有问题,因为按照我们的习惯char就是表示singned char。为了防止这种不同平台移植导致问题的发生。可以事先写代码有符号就强行写signed,无符号就强行写unsigned。这样就不怕不同平台移植的问题了。
如果代码不想修改,使用–fsigned-char选项,可以保证编译时char是signed的。
那么问题来了,其他类型会有这个问题么。有待实验,或者小伙伴试验过后可以给我留言。
不同架构下C语言char的表达意思
最新推荐文章于 2022-01-17 14:53:42 发布