最近看到有人称赞另一个用户使用 sizeof var 而不是 sizeof(type)。我一直认为那只是一种风格选择。有什么显着差异吗?例如,带有 f 和 ff 的行被认为比带有 g 和 gg 的行更好:
typedef struct _foo {} foo;
foo *f = malloc(count * sizeof f);
foo *g = malloc(sizeof(foo) * count);
foo **ff = malloc(count * sizeof *ff);
foo **gg = malloc(sizeof(foo*) * count);
在我看来,第一套只是风格问题。但在第二对行中,多余的第二个 * 很容易与乘法混淆。
最佳答案
如果变量的类型改变了,如果变量是参数而不是类型,则 sizeof 不需要改变。
关于@icepack 的评论:改变类型与变量名的可能性或可能性不是问题。假设变量名用作 sizeof 的参数,然后更改。在最好的情况下,重构重命名操作会更改所有事件并且不会引入错误。在最坏的情况下,一个 sizeof 的实例被遗漏了,编译器会报错,你会修复它。如果类型已更改,您就完成了,sizeof 语句不可能出错。
现在假设类型是 sizeof 的参数。如果变量的类型发生变化,除了检查之外没有其他方法可以找到与该变量相关的所有 sizeof。您可以搜索,但您会搜索到所有相同类型的 sizeof 的不相关使用。如果遗漏了一个,您将因大小不匹配而遇到运行时问题,这更难找到。
关于c - 带有类型或变量的 sizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373252/