所以我一直在寻找关于两个主题的经验法则指南:
MyThing make_my_thing() { MyThing m; /* ... */ ; return m; }
// Vs.
MyThing* make_my_thing() { MyThing* m = malloc(sizeof(MyThing)); /* ... */ ; return m; }
// Assume do_something() doesn't need to mutate m
void do_something(MyThing m) { /* ... */ }
// Vs.
void do_something(MyThing* m) { /* ... */ }
我要寻找的经验法则不适合所有情况,但在结构不是很大的一般情况下,应该使用默认值。
请注意,我知道不同的情况可能需要不同的解决方案-但尽管如此,我仍在寻找大多数开发人员遵循的基本“默认”约定(如果存在)。
我已经在该网站上阅读了许多问题和答案,并提出了以下准则:
malloc
对其进行生命周期管理。这些准则是否在C程序员中被广泛接受?如果没有,那么更普遍接受的约定是什么?
答案 0 :(得分:1)
通过值或指针准则传递和返回结构
1)体积小。当struct
较小时-我会说<=指针大小的两倍,从值上传递struct
而不是指针指向{ struct
。通过值传递对象的简单性。
2)大尺寸。当struct
大时,肯定通过pointer to a
结构会更有效。
3)数值对象。当struct
具有固定大小的分配并表示 number 时,按值传递似乎更好。
4)隐藏。指向struct
的不透明点是隐藏struct
的内在特性和推广面向对象代码的好方法。
在其他情况下,我想讲清楚代码-通常意味着使用指向struct
的指针,这是C语言惯用的。
对于一般用法,我发现重新调整了指向值很小的struct
的指针-除了一个重要的情况:形成一组函数,其中 init 函数返回一个分配了指向struct
的指针。