使用typedef来定义新的整数类型

ZDNet软件频道 时间:2003-07-28 作者:ZDNet China,David Brenan |  我要评论()
本文关键词:embedded
C或者C++内置的整数数据类型的长度是很含糊的。这种含糊性会导致难以预料的意外和后果,尤其是在不同CPU和不同编译器之间移植嵌入式代码的时候。
本文译自Builder.com,未经许可请勿转载 C或者C++内置的整数数据类型的长度是很含糊的。这种含糊性会导致难以预料的意外和后果,尤其是在不同CPU和不同编译器之间移植嵌入式代码的时候。

下面是内置的整数类型的基本规则:

  • char是8位的或者更长。基本的无限制的char可以缺省为有符号的或者是无符号的;具体选择哪种就要看编译器了。
  • short至少是16位的,而且要不大于int的长度。
  • int至少是16位的,而且要不小于short的长度。它通常是机器整数的自然长度,典型的是16位或者32位。尽管ANSI的C语言要求int是16位的或者更长,但是有些用于小型处理器的非常规嵌入式编译器允许使用8位的int。
  • long不少于int的长度。它通常是32位或者64位的。

下面是两个简单的例子,用来说明这些不确定性所导致的问题。

例一:访问内存映射I/O端口

在下面的例子里,你准备把什么写到内存映射I/O端口去?

    char data = 0x80;
    unsigned int *port = PORT_ADDR;
    *port = data;

其结果要依赖于你的编译器和CPU的架构。下面是一些可能性:

  • 将0x0080写到一个16位的内存映射端口。
  • 将0xFF80写到一个16位的内存映射端口。
  • 将0xFFFFFF80写到一个32位的内存映射端口。
  • 将0x00000080写到一个32位的内存映射端口。

上面这些情况可能会将错误的数据位写入到目标I/O端口,还可能写到相邻的端口。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134