省略数据类型(例如“unsigned”而不是“unsigned int”)

Posted

技术标签:

【中文标题】省略数据类型(例如“unsigned”而不是“unsigned int”)【英文标题】:Omitting the datatype (e.g. "unsigned" instead of "unsigned int") 【发布时间】:2011-05-17 23:32:11 【问题描述】:

我知道如果在 C/C++ 代码中以这种方式省略数据类型声明:unsigned test=5;,编译器会自动将此变量设为 int(在这种情况下为无符号 int)。我听说它是​​ C 标准,适用于所有编译器。

但是我也听说这样做被认为是一种不好的做法。

你怎么看?我真的应该输入unsigned int 而不仅仅是unsigned吗?

shortlonglong long 也是数据类型吗?

【问题讨论】:

刚刚看到它被使用并来这里询问完全相同的事情。不喜欢它,但它就在那里。 【参考方案1】:

unsigned 是一种数据类型!它恰好别名为unsigned int

当您编写 unsigned x; 时,您不会省略任何数据类型。

这与 C 中存在的“默认 int”完全不同(但在 C++ 中不存在!),您在声明中确实省略了类型,C 会自动推断该类型为 int

至于风格,我个人更喜欢明确,因此写unsigned int。另一方面,我目前参与了一个图书馆,它的惯例是只写unsigned,所以我这样做了。

【讨论】:

+1:对。 unsigned 实际上只是 unsigned int 的别名 感谢您的回答。那么是shortlonglong long 数据类型吗? @rhino:是的。您提到的每个数据类型都是不同的数据类型 在 C99 中,unsigned unsigned int 的别名,其方式与 C++ 相同(第 6.7.2 节)。 +1 表示偏好显式声明但遵循编码标准。【参考方案2】:

我什至会更进一步,使用 stdint 的 uint32_t 类型。 这可能是一个品味问题,但我更愿意知道我使用的是什么原语,而不是一些古老的针对每个平台进行优化的考虑。

【讨论】:

std::uint32_t 不是“原始”。它是一个可选的 typedef 类型,它必须恰好有 32 位并且可能是也可能不是原语。【参考方案3】:

正如@Konrad Rudolph 所说,unsigned 一种数据类型。它实际上只是unsigned int 的别名。

关于使用unsigned 是不好的做法的问题?我会说不,使用unsigned 作为数据类型说明符没有任何问题。专业人士不会对此感到困惑,在我看来,任何说你必须使用unsigned int 的编码标准都是不必要的严厉。

【讨论】:

【参考方案4】:

无端冗长被认为是有害的。 我永远不会写 unsigned intlong intsigned 任何东西(char 或位域除外),因为它会增加混乱并减少有意义的代码量您可以容纳 80 列。 (或者更有可能,鼓励人们编写不适合 80 列的代码......)

【讨论】:

我发现人们为了满足 80 个字符的限制而简单地分行会损害可读性。冗长有它的位置。某人接受的冗长程度取决于他们的口味。我自己倾向于在冗长和明确方面犯错。 我发现分行也会损害可读性,但不会超过水平滚动。因此,最好的办法是避免用无意义的字符填充空间(并同时避免两者)。 “我永远不会写unsigned int”我也不会! ...“或signed”这个我不确定;为了与unsigned对称,我倾向于写signed而不是int……但确实有一点,int更简洁,因为它更简洁。

以上是关于省略数据类型(例如“unsigned”而不是“unsigned int”)的主要内容,如果未能解决你的问题,请参考以下文章

unsigned char 和 signed char 区别

使用 GLuint 而不是 unsigned int 有啥好处?

unsigned int是啥意思

MySQL 数据类型 INT(11) 而 UNSIGNED INT(10)?

如何从接口中省略一个属性,而不是 TypeScript 中的类型?

为啥 unsigned int 不符合 CLS?