1

我想知道在性能,声明等方面是否有任何差异。

我有一个名为 features.h 的文件,它有一个结构定义:

typedef struct feat_record
{
 ...
 ...
} Feature;

我想在另一个文件的方法中使用它,在另一个文件.h文件中我包含features.h。我的问题是,如果像这样在另一个文件 .h 中声明方法有区别:

void myMethod(Feature *f);

或像这样:

void myMethod (struct feat_record *f);

谢谢

4

2 回答 2

0

这只是编码风格,除了主观的个人喜好之外没有其他区别。

对于处于 C 和 C++ 边界的程序,通常鼓励使用 typedef 版本,因为它使样式与 C++ 类型一致(在 C++ 中,声明结构的对象时,struct 关键字是多余的)。

struct tag 版本主要受到 Linux 阵营的鼓励,并由 Linux 内核代码风格指南强制执行(除了主观意见之外,它没有提供太多理由)。

没有明显的对与错,只要选择你喜欢的风格并坚持下去。

于 2013-07-02T07:50:25.327 回答
-2

不同之处在于(可能包括也可能不包括的定义)的typedef声明必须在使用它的函数声明之前,而Featurefeat_record

void myMethod (struct feat_record *f);

作为接口声明独立存在;它不依赖于前面的typedef或其他声明。

然而,最好先声明struct feat_record;,即使只是为了消除不可避免的编译器警告。并且在实现 的文件中的函数声明之前需要这样的声明myMethod

最终,区别在于风格,即冗长:您应该决定是否要引用struct程序中的所有结构。这意味着更多的打字,但作为初始化事物的提醒。(或者,如果您愿意,可以为必须作为 . 处理的事物的元数据标签struct。)

至于编译出来的程序,没有想象中的区别。

于 2013-07-02T07:47:35.283 回答