是否有用于修改C中结构的惯用最佳实践?

时间:2016-10-17 15:56:51

标签: c

假设您想在C中创建一个函数f来转换某些结构,比如struct s1

现代C中是否有最佳做法/习惯用法是否更好地为您的函数f接收/返回结构指针副本结构?

例如,以下是f的一些可能的类型签名(我确信还有更多我缺少的):

struct s1 f(struct s1)
struct* s1 f(struct* s1)
void f(struct *s1)

一般来说,人们是否试图避开某些类型签名而不是其他签名?

2 个答案:

答案 0 :(得分:1)

我认为关于复制工作的问题完全取决于意图 - 因为克隆和更改克隆与修改原始文件非常不同。因此排除#1

如果我们要修改原件,那么我会选择最后一个签名。很明显,这是在原始的,第二个可能是克隆与否,它不清楚,因为它返回一个指向某个结构的指针

答案 1 :(得分:1)

最后一个是惯用的。

C人们非常重视效率,因为这通常是他们使用C而不是更高级语言的原因,并且传递指针比推动堆栈上的整个结构更快。就地修改结构同样比获取副本,分配堆内存和返回它更快。 C也没有很好的方法来区分深层和浅层副本,因此复制方法会导致指针成员发生什么问题。

但是你会在真正的C代码中看到所有这三种方法。