C 结构体定义标准

5

在过去几年中,我一直在使用C进行编程,并养成了将结构体的typedef放在头文件中,而将其定义留在源文件中的习惯,这样别人就可以使用我的文件而不会破坏它们。

// header file
typedef struct s_example EXAMPLE

// source file
struct s_example {
       // something
};

在这样做的过程中是否有问题?我是否应该让别人知道我如何处理我的结构体?

我之所以问这个问题,是因为我看到很多人将所有内容都显示在头文件中。


6
如果它们只处理指针,那么不完整的类型就可以使用。 - Ben Voigt
1
还要注意,在C++中,typedef是不必要的,因为在源代码中引用裸类型时,不必像在C中那样使用struct关键字。 - aruisdante
如果用户无法看到结构体的格式/字段,他们如何能够使用结构体?结构体不应该被typedef。这样的typedef只会使代码变得模糊,并且会使编译器名称空间混乱。建议:将结构体格式放在头文件中(如果其他程序需要访问本地结构体实例,则可能需要一个extern语句)。 - user3629249
@user3629249 我总是使用typedef来定义一个struct,这样源代码中就不必每次声明或将其用作函数参数时都写上struct这个单词。这是不好的编程习惯吗? - Weather Vane
1
@WeatherVane:不,这不是糟糕的做法。我不知道用户3629249从哪里得到那个想法。但我同意隐藏结构的布局对那些将要使用它的程序员来说毫无意义。 - TonyK
1个回答

9
只在头文件中声明的缺点是,所有不包含该结构体定义的源文件都不能实例化该结构体,而只能实例化指向它的指针。这是因为对于那些其他的源文件来说,你的结构体是一个不完整类型。如果这对你的应用程序来说没问题,那么只在头文件中声明也没有问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接