如何在包含头文件的文件中包含extern typdedef结构,其中结构在C中定义?

时间:2015-04-21 11:15:57

标签: c struct extern

我有三个文件,libsched.cmain.clibgrapher.c及其标题*.h

libsched.h定义typedef struct p{.....}process;,然后main.c使用libsched.h。 然后我有另一个文件libgrapher.c使用process中定义的libsched.h

如果libsched.h process libsched.h libsched.h libgrapher.h中没有struct,请libgrapher.h

重新定义{{1}}中的{{1}}给我一个重新定义的错误。

3 个答案:

答案 0 :(得分:2)

您的要求没有任何意义。 libgrapher.h需要访问libsched.h中的所有内容,然后它应该包含该头文件。或者,如果它不能访问该h文件中的所有内容,只能访问其中的部分内容,则需要将h文件拆分为两个。

奇怪的要求以及躲避各种文件依赖性的模糊技巧的需要总是源于糟糕的程序设计。每当你发现自己需要这样的事情时,请退后一步,重新考虑你的程序设计。

答案 1 :(得分:1)

你可以这样做。

typedef struct p process;

该声明告诉编译器,有一个名为p ad的结构,其中struct p的类型别名为process

只要您只使用指向process的指针,这将有效。

答案 2 :(得分:0)

唯一的选择是不完整的类型定义,但这会使你的文件以不好的方式相互依赖。在标题中包含其他标题没有任何问题。