我找到了一些源代码,我想将它们合并到我正在编写的 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/