在 C 中使用 short 是一种不好的做法

Posted

技术标签:

【中文标题】在 C 中使用 short 是一种不好的做法【英文标题】:Is using short in C a bad practice 【发布时间】:2018-09-13 13:08:50 【问题描述】:

我有一个内存敏感项目,它使用整数将顶点的索引存储在图的密集前驱树中。 (您使用例如 Bellman Ford 生成的东西)。我知道一个事实,即我不会拥有超过 10000 个顶点的图,并且数据类型一旦创建就是不可变的。

所以在我的情况下替换是一种不好的做法

int predecessors[blah];

short predecessors[blah];

如果我的作品被用作图书馆。

【问题讨论】:

我想说你应该typedef short vertex_id_t; 能够轻松替换类型。否则,只要它提供真正的性能/内存消耗改进,我认为它没有问题。 寻找最佳实践来代替常识是一种不好的做法。 我的荣幸。如果您必须两次由不同的人撤消对您的问题的相同编辑,那么我建议您开始考虑为什么您的问题似乎会邀请该编辑...(我承认我只是在您之后才意识到上一次的编辑+撤消解开我的。) 如果您想将计数的宽度限制为 16 位,请使用 uint16_t(或 int16_t,如果您需要 -1 作为某种标记,而 0xFFFF 不会这样做)。跨度> 一般来说,对于“使用 X 是一种不好的做法”这个问题(其中 X 是语言的组成部分),答案是“不,这取决于"。 【参考方案1】:

    避免过早优化。衡量使用short 而不是int 的影响,然后根据该信息做出决定。

    正如 @HolyBlackCat 所说 - 考虑使用 typedef(或类似的),以便在更改需求时可以更改底层类型(即 shortint)。

    如果您使用short,请添加健全性检查以避免有人,有一天在您的库中提供 100.000 个顶点并且没有意识到它无法处理这些(直到一个无声的失败变成一个非常非无声的失败,代价高昂设备大声撞击某物)。

    明确说明您最多只能处理 X 个顶点。

【讨论】:

以上是关于在 C 中使用 short 是一种不好的做法的主要内容,如果未能解决你的问题,请参考以下文章

使用“?”是一种不好的做法。在 Racket 方法名称中?

使用动态是不是被认为是一种不好的做法?

匿名函数在 JavaScript 中是一种不好的做法吗?

为啥单身人士被认为是一种不好的做法? [复制]

在 Angular 中使用 jQuery 是一种不好的做法吗? [关闭]

为啥使用“评估”是一种不好的做法?