gpt4 book ai didi

c - 不透明的 C 结构 : various ways to declare them

转载 作者:太空狗 更新时间:2023-10-29 16:19:20 30 4
gpt4 key购买 nike

我见过以下两种在 C API 中声明不透明类型的方式。在 C 中声明不透明结构/指针的各种方法有哪些?使用一种样式比使用另一种样式有什么明显的优势吗?

选项1

// foo.h
typedef struct foo * fooRef;
void doStuff(fooRef f);

// foo.c
struct foo {
int x;
int y;
};

选项 2

// foo.h
typedef struct _foo foo;
void doStuff(foo *f);

// foo.c
struct _foo {
int x;
int y;
};

最佳答案

我投票给 mouviciel 发布然后删除的第三个选项:

I have seen a third way:

// foo.h
struct foo;
void doStuff(struct foo *f);

// foo.c
struct foo {
int x;
int y;
};

如果您真的无法忍受键入struct 关键字,typedef struct foo foo;(注意:去掉无用且有问题的下划线)是可以接受的。但是无论您做什么,永远不要使用typedef 来定义指针类型的名称。它隐藏了一个极其重要的信息,即这种类型的变量引用了一个对象,只要你将它们传递给函数,它就可以被修改,并且它使得处理不同的限定(例如,const-qualified)指针的版本是一个主要的痛苦。

关于c - 不透明的 C 结构 : various ways to declare them,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3965279/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com