如何动态自动注册C函数,以便它可以在整个项目中使用,而无需任何import / headers / externs / .pch文件?

时间:2012-12-27 22:19:24

标签: objective-c dynamic runtime

在我的项目中,我有一个带有唯一C函数的doSomething.m和soSomething.h文件:

void doSomething() {

}

第一个问题:如何在我的代码中的任何位置访问此功能而无需导入任何标头?

注意:我想,为了解决这个问题,根本不需要doSomething.h文件,但它的存在/不存在不是限制。

我有以下知识,但我无法全面了解所需内容:

  • 我可以使用另一个带有属性((构造函数))的函数,它将在编译运行时运行,它可以做一些操作来注册 doSomething ;
  • _class_addMethod_在“运行时”上添加方法。但我不知道如何解决“全局命名空间类”;
  • NSObject的 + load 方法,但这里不相关。

第二个棘手的问题在第一个问题的基础上:当我对第一个问题有答案时,我怎么能防止“隐含的函数声明'doSomething'在C99中无效”功能 doSomething 而不是所有其他功能?

更新:我忘了从考虑中排除以下选项:

  1. .pch文件,全局标题
  2. 我要使用 doSomething 方法的文件不应包含任何其他声明,例如 extern void doSomething()

2 个答案:

答案 0 :(得分:3)

嗯,你真的不能这样做,所以你不必导入标题,你可以做的是将include添加到你的预编译标题

查看项目中的“Supporting Files”文件夹。

你会看到像这样的文件

<ProjectName>-prefix.pch

在此文件的底部添加导入。然后,每个文件都会在此处添加所有导入。

注意

我使用Xcode

我想如果您使用其他IDE(例如GnuStep),您可能会有另一个类似的地方。我不知道其他IDE是如何工作的。

答案 1 :(得分:0)

在要使用它的文件中,导入它:

extern void doSomething (void);