c - 带有类型或变量的 sizeof

标签 c coding-style 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373252/

相关文章:

java - System.out.println(true) 和 System.out.println ("true"之间的区别)

c - 关于压缩一系列 1 和 0

c++ - 是否设置了 set-user-id 位?

c - 关于从文件读取多个整数,将它们转换为二进制,然后将它们打印到屏幕的指南?

C头文件依赖

android - 如何在字符串数组中设置文本样式?

javascript - 如何为我的网站提供西类牙语翻译?

c++ - 从 Visual C++ 中的 unordered_map 继承时,模板参数的 sizeof() 不正确

C语言中Sizeof运算符的复杂声明

c - 通过将指针整数与 sizeof(int) 相乘来使用 realloc 不起作用