【问题标题】:C struct definition standardC结构定义标准
【发布时间】:2015-05-23 03:21:27
【问题描述】:

在过去的几年里,我在用 C 编程,我养成了一个习惯,将结构的 typedef 放在头文件中,并将其定义留在源文件中,这样其他人就可以使用我的文件而不让他们使用把事情搞砸了。

// header file
typedef struct s_example EXAMPLE

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

这样做有什么问题吗,我应该让其他人知道我对我的结构做了什么吗?

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

【问题讨论】:

  • 如果他们处理的只是一个指针,一个不完整的类型就可以了。
  • 另请注意,在 C++ 中,typedef 是不需要的,因为当您像在 C 中那样在源代码中引用裸类型时,您不必使用 struct 关键字。
  • 如果用户看不到格式/字段,他们如何能够使用结构?并且一个结构不应该是 typedef'd.. 这样的 typedef'ing 只会模糊代码并使编译器名称空间混乱。建议:将结构格式放在头文件中(如果其他程序需要访问本地结构实例,可能还有一个extern语句。)
  • @user3629249 我总是typedef 和struct 这样每次我声明一个或使用一个作为函数参数时,源代码就不会被struct 这个词弄得乱七八糟。这是不好的做法吗?
  • @WeatherVane:不,这不是坏习惯。我不知道 user3629249 从哪里得到这个想法。但我同意对将要使用它的程序员隐藏结构的布局是没有意义的。

标签: c++ c struct standards standards-compliance


【解决方案1】:

仅在头文件中声明的缺点是所有其他不包含struct 定义的源文件都无法实例化该struct 的实例,而只能实例化指向它的指针。这是因为,对于那些其他源文件,您的 struct 是 incomplete type。如果这对您的应用程序来说没问题,那么仅在标题中声明就没有错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2015-03-06
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多