我查看了一些代码并注意到约定是将指针类型转换为
SomeStruct*
进入
typedef SomeStruct* pSomeStruct;
这有什么优点吗?
原文由 Unknown 发布,翻译遵循 CC BY-SA 4.0 许可协议
我查看了一些代码并注意到约定是将指针类型转换为
SomeStruct*
进入
typedef SomeStruct* pSomeStruct;
这有什么优点吗?
原文由 Unknown 发布,翻译遵循 CC BY-SA 4.0 许可协议
一般来说,没有。在特定情况下,是的。
有一些其他答案暗示了一些结构,那就是 仅 指针类型。我想到了几个仅指针类型的构造。如果有人想到更多,我会将它们添加到列表中。
这些类型的实现对用户完全隐藏。您通常会在标头中看到一个结构 typedef,但没有该结构的实现。因此,您不能取消引用这些类型的值。对这种类型进行操作的所有函数都采用指向这些类型的指针。在这些情况下添加指向 typedef 的指针是合适的。您经常会看到这些称为“句柄”的类型。
typedef struct handle_ * handle;
handle get_handle(string s);
void mutate_handle(handle h, value v);
void release_handle(handle h);
另一种仅指针类型是使用灵活数组成员 (FAM) 定义的类型。 FAM 类型中的最后一个成员是不受约束的数组。您打算为这些类型动态分配存储空间,并且灵活数组被视为与结构内联。您可以访问 FAM 类型中的字段,但不能取消引用整个对象。在这里添加指向 typedef 的指针也是合适的。
typedef struct string {
size_t capacity;
size_t length;
char buffer[];
} * string;
string string_new(void);
size_t string_length(string s);
void string_append(string * s, char c);
void string_delete(string * s);
原文由 ktb 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
当指针本身可以被视为“黑匣子”时,这可能是合适的,即其内部表示应该与代码无关的一段数据。
本质上,如果您的代码 永远不会 取消引用指针,而您只是将它传递给 API 函数(有时通过引用),那么 typedef 不仅会减少代码中
*
的数量,而且还建议对程序员来说,指针不应该被真正干预。如果需要,这也使得将来更改 API 变得更容易。例如,如果您更改为使用 ID 而不是指针(反之亦然),现有代码不会中断,因为从一开始就不应该取消引用指针。