为了你的(或)int的大小?

时间:2013-07-16 17:46:06

标签: c coding-style embedded

我用Google搜索了,并且惊讶地发现没有指南,经验法则,样式等。当在C中声明(带符号或未签名)整数时,可以选择使用处理器定义的任何内容int,或者可以指定宽度(例如uint16_tint8_tuint32_t等。

在进行桌面/专用C程序时,我非常倾向于“只使用默认值”,除非对我来说指定宽度非常重要(例如“这是一个32位ID”)。

最近完成了更多的微控制器工作(pic18和AVR),我倾向于调整所有尺寸,只是因为你变得如此空间良心。

现在我正在研究一些Pic32代码(没有操作系统),我发现自己在两个极端之间徘徊。

我很好奇人们制定了什么样的量规(如果有的话)可以帮助他们决定何时调整它们的大小,何时使用默认值?为什么?

3 个答案:

答案 0 :(得分:6)

如果某些事情对您很重要,请尽量使其尽可能明确 如果你真的不在乎,让编译器决定。

这与你自己写的非常接近。如果您必须遵循规范,即说明某些内容为32位,请使用大小类型。如果它只是一个循环计数器,请使用int

答案 1 :(得分:2)

实际上有一个指南提到了这一点。 MISRA C有一条规则,规定您应始终使用大小类型。但该规则只是建议性的,不是必需的或强制性的。

来自here

  

6.3(adv):应使用表示大小和签名的'typedef'来代替基本类型。

答案 2 :(得分:2)

你应该同时使用两者。

米斯拉规则很好,但不适合所有地方。

使用大小的类型更适合跨平台编译,例如在PC平台上模拟嵌入式软件。

但即便如此,您还需要根据尺寸类型来考虑printf尺寸。

uint32_t val;

printf("%d", val);
printf("%ld", (long)val);

第一个printf适用于许多32位平台,但在许多嵌入式平台上失败,int = 16bit / long = 32bit。

uint16_t len = strlen("text");

可以产生警告,因为strlen的返回类型为intint可能大于uint16_t,此处最好使用int len