“C”sizeof类型或变量

最近看到有人赞扬另一位用户使用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类型或变量 - 代码日志