c - 全局访问 typedef

标签 c struct header typedef

我找到了一些源代码,我想将它们合并到我正在编写的 C 程序中。我们称它为 existing.c。此文件包含结构的 typedef,该结构是文件下方定义的函数的参数所必需的。我想在我的文件 main.c 中调用这个函数。我知道我可能可以通过在 main.c 中声明一个函数原型(prototype)来访问该函数,但我还需要访问该结构定义以声明和调用该函数。

没有 existing.c 的 .h 文件,尽管我当然可以创建一个,比如 existing.h。但是,如果我将 typedef 放在 existing.h 中,那么我似乎必须将 #include "existing.h"放入 existing.c 中,根据我对头文件的理解,这似乎不正确。我认为他们的目的是让某个文件中的代码可供其他编译单元使用,而不应该是该文件本身所需要的。

所以我想我的主要问题很简单,我如何在我自己的文件 main.c 中使用 existing.c 中定义的函数?我是否可以在没有头文件的情况下执行此操作,例如通过在 main.c 中放置某种类似于函数原型(prototype)的结构原型(prototype),或者将结构指定为外部结构或类似的东西?

编辑:我可能应该在我的原始帖子中提到,我希望避免使用 header 的一个原因是这样我可以不加改动地合并现有的.c 文件,以防将来对该源进行修订。从答案来看这是不可能的。

最佳答案

if I put the typedef in existing.h, then it seems like I would have to put #include "existing.h" into existing.c, which does not seem correct from my knowledge of header files.

这正是要做的事情:移动 typedef进入existing.h header ,然后将该 header 包含在 existing.c 中并在您的代码中。

I thought their purpose was to make the code in a certain file available to other compilation units, and shouldn't be required by that file itself.

这就是 header 的工作方式 - 您可以从实现文件和使用该实现的代码中包含它们。

虽然可以编写与实现中的内容相匹配的 header ,并在不包含在实现文件本身的情况下使用它,但这并不可取:将 header 包含在实现中的一个原因是让编译器根据 header 中的函数原型(prototype)检查代码,并针对可能发现的任何差异产生错误。

关于c - 全局访问 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24486271/

相关文章:

c - 用于查找两个数字中较大者的库函数

arrays - 函数内结构数组的全局作用域 - Swift

c - 为什么必须使用 '->' 访问结构成员?

html - 为什么这些元素没有内联显示?

c - 查找字符数相同的子字符串

C++:初始化在头文件中声明的模板构造函数/例程?

c - WSAPoll on named fd::need 建议如何重写它

json - 无法将 json 数据反序列化为结构

video - 如何将 youtube 视频嵌入为带有自动播放、循环和隐藏观看、分享、Youtube Logo 和视频标题的标题?

python - NS3 - python.h 文件无法定位编译错误