c - 如何在包含文件中部分声明类型定义的结构

标签 c include typedef

作为一般做法,我正在尝试尽量减少#include 文件的相互依赖性。

在 xxx.h 中我有:

struct my_struct;  // partial decl to satisfy use of my_struct*
void funct(struct my_struct* ms);  // uses the partial def

如何使用 typedef 的结构进行类似的部分声明? 我在第三个 #include 中有一个实际声明,看起来像(比如在 yyy.h 中):

typedef struct my_data_s {
  int ival;
  ... struct's other components ...
} my_data_t;

我只想在 xxx.h 中引用 typedef 的代表性声明:

typedef struct my_data_s  my_data_t;  // actual full decl is elsewhere
void funct2(my_data_t* md);   

此尝试导致“typedef my_data_t 的重新定义”错误。 (使用 gcc 4.4.3/Ubuntu 10.4)其他随机搜索尝试(例如,将“{}”添加到 typedef)也会出错。

我知道编译器只需要知道该函数需要一个指针,所以看起来这应该是可能的。到目前为止,没有发现没有错误/警告的编译。

我看过其他问题和答案,找不到解决这个问题的方法。似乎应该有一个众所周知的方法来做到这一点(?!)(我知道我可以 #include yyy.y 每当我 #include xxx.h - 试图避免这种依赖性。)谢谢。

最佳答案

您是否尝试过简单的方法:?

xxx.h

struct my_data_s;
typedef struct my_data_s my_data_t;

yyy.h

#include "decl.h"
struct my_data_s {
   int foo;
};

关于c - 如何在包含文件中部分声明类型定义的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9724933/

相关文章:

c - 包含头文件是如何发生的?

c - typedef a struct 不阻止关键字 struct

c++ - 如何用两点和步骤c++之间的元素初始化 vector

c++ - 将tensorflow与另一个库一起使用时出现段错误,两者都链接到eigen3

C(初学者): Why won't my qsort work? 编辑:从一个错误到另一个错误

c - GetKeyNameText 的反向操作

java - android中是否有用于ms office word(.doc/.docx)到(image/html/xml/pdf)转换的Api

php - 如果在循环中包含 PHP 中的文件,每次在循环中运行时它都会访问该文件吗?

c - 没有标签的结构的 typedef 每次使用时都会创建不同的类型吗?如果不是,为什么?

c++ - 两个结构的顺序