使用typedef结构

时间:2013-07-02 07:42:21

标签: c struct include typedef

我想知道在表现,声明等方面是否存在任何差异。

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

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

我想在方法的另一个文件中使用它,在另一个文件.h文件中我包含features.h。 我的问题是,如果在另一个文件中声明方法之间存在差异.h就像这样:

void myMethod(Feature *f);

或者像这样:

void myMethod (struct feat_record *f);

由于

2 个答案:

答案 0 :(得分:0)

这只是编码风格,与主观,个人偏好没有其他区别。

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

结构标记版本主要受Linux阵营的鼓励,并由Linux内核代码样式指南强制执行(除了主观意见之外,它没有提供太多理由)。

没有明显的对错,只需选择你喜欢的风格并坚持不懈。

答案 1 :(得分:-2)

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

void myMethod (struct feat_record *f);

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

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

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

至于编制的程序,没有可能存在的差异。