如何保证变量的大小

时间:2013-07-17 12:26:06

标签: c typedef

我的变量必须是16位长。我应该如何在平台上将其定义为16位?

我可以将其定义为short,但根据平台,它可以是16位或更多。

4 个答案:

答案 0 :(得分:6)

假设您使用的是C99,请使用<stdint.h>中的uint16_t(或int16_t)。只要编译器具有可用的基础16位类型,这些就保证存在。

答案 1 :(得分:1)

对有符号整数使用int16_t或对无符号使用uint16_t,在C99中引入标题inttypes.hstdint.h。如果您使用的是C89,请定义您自己的类型。

请注意,根据C11(ISO / IEC 9899:201x)§7.20整数类型

,某些实现可能无法提供它们。
  

对于此处描述的实现提供的每种类型,应声明typedef名称并定义关联的宏。相反,对于此处描述的实现未提供的每种类型,不应声明typedef名称,也不应定义关联的宏。实现应提供描述为“必需”的类型,但不需要提供任何其他类型(描述为“可选”)。

答案 2 :(得分:0)

如果您想要一个可移植的无符号16位整数,请使用uint16_t,对于带符号的16位整数,请使用int16_t

inttypes.hstdint.h都在C99中引入。如果您使用C89,则必须定义自己的类型。

答案 3 :(得分:0)

如果<stdint.h>int16_t不可用,则解决方法可能是位域。由于位域仅在结构或联合内有效,因此必须将其包装成一个:

#include <stdio.h>

struct auw {
    int sixteen :16;
        };

int main(void)
{

struct auw one = {16*1024 }, two, result;

two = one; /* assigmment is easy*/

        /* but addition is a bit more painful */
result.sixteen = one.sixteen + two.sixteen -1;

printf("Result=%d\n", (int) result.sixteen );

return 0;
}