我想知道在表现,声明等方面是否存在任何差异。
我有一个名为features.h的文件, 它有一个结构定义:
typedef struct feat_record
{
...
...
} Feature;
我想在方法的另一个文件中使用它,在另一个文件.h文件中我包含features.h。 我的问题是,如果在另一个文件中声明方法之间存在差异.h就像这样:
void myMethod(Feature *f);
或者像这样:
void myMethod (struct feat_record *f);
由于
答案 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
处理的事物。)
至于编制的程序,没有可能存在的差异。