Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否调整(u)整数的大小?_C_Coding Style_Embedded - Fatal编程技术网

C 是否调整(u)整数的大小?

C 是否调整(u)整数的大小?,c,coding-style,embedded,C,Coding Style,Embedded,我在谷歌上搜索了一下,惊讶地发现没有任何指导原则、经验法则、样式等。在C中声明(有符号或无符号)整数时,可以选择只使用处理器为int定义的任何内容,或者可以指定宽度(例如uint16\u t,int8\u t,uint32\u t,等等) 在执行桌面/专用C程序时,我倾向于“只使用默认值”,除非指定宽度对我来说非常重要(例如,“这是一个32位ID”) 最近我做了更多的微控制器工作(pic18和AVR),我倾向于调整所有的尺寸,只是因为你变得很有空间感 现在我正在研究一些Pic32代码(没有操作系

我在谷歌上搜索了一下,惊讶地发现没有任何指导原则、经验法则、样式等。在C中声明(有符号或无符号)整数时,可以选择只使用处理器为int定义的任何内容,或者可以指定宽度(例如
uint16\u t
int8\u t
uint32\u t
,等等)

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

最近我做了更多的微控制器工作(pic18和AVR),我倾向于调整所有的尺寸,只是因为你变得很有空间感

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


我很好奇人们制定了什么样的准则(如果有的话)来帮助他们决定何时调整Int的大小,以及何时使用默认值?为什么呢?

如果某件事对你来说很重要,尽量把它说清楚。
如果你真的不在乎,让编译器来决定


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

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

发件人:

6.3(adv):“typedefs”表示大小和签名,应代替基本类型

你应该两者都用

Misra规则很好,但并不适用于所有地方

对于跨平台编译,使用大小类型更好,就像在pc平台上模拟嵌入式软件一样

但即使这样,您也需要根据大小类型考虑
printf
大小

uint32_t val;

printf("%d", val);
printf("%ld", (long)val);
第一个
printf
在许多32位平台上工作,但在许多int=16位/long=32位的嵌入式平台上失败

uint16_t len = strlen("text");

可以产生警告,因为strlen的返回类型是
int
,并且
int
可以大于
uint16\u t
,在这里最好使用
int len

编写非一次性软件时,我倾向于使用
uint\u t至少32\u t
等类型,除非我需要特定的大小。这让我可以确定最小大小,并允许编译器优化它擅长的下一个更大的大小。这个问题正在征求意见。通常,我为通过网络进行通信或存储在磁盘上的数据类型保留大小的整数,这些数据类型以后可能会被其他程序读取。@jxh我遵循相同的做法。如果该数据类型仅用于定义该数据类型的进程的独立实例(即,非分布式)的内部使用,我会让编译器选择该类型的“最佳大小”。对于离开进程的任何内容(无论是用于持久存储还是用于进程间通信),我宁愿在数据大小方面进行显式调整。您可能仍然需要注意端性问题,但至少数据大小是可预测的。如果要考虑可移植性,请使用
[u]int\u至少tn\t
[u]int\u fastN\t
类型或内置类型(它们几乎相同)<代码>[u]intN\u t类型是可选的。我有一种感觉,在大多数情况下,过分担心调整ints的大小会导致比优势(大小、性能等)更严重的大脑损伤。当然,总会有例外,你可以挤出代码中的每一点。