混合Objective-c和c:如何使用缺少头文件的c源文件?
我不想在Objective-C项目中使用某些C源代码,但该源代码缺少头文件。我在构建时收到一个“隐式函数声明”警告,但是在我尝试调用其中一个C函数之前,应用程序启动良好,工作正常。现在它崩溃可能是因为我通过的args出现了一些问题,我还没有进一步调查。但是: 有没有办法消除生成警告? 我走对了吗?这意味着即使没有头文件,C源代码也可以使用。混合Objective-c和c:如何使用缺少头文件的c源文件?,objective-c,c,Objective C,C,我不想在Objective-C项目中使用某些C源代码,但该源代码缺少头文件。我在构建时收到一个“隐式函数声明”警告,但是在我尝试调用其中一个C函数之前,应用程序启动良好,工作正常。现在它崩溃可能是因为我通过的args出现了一些问题,我还没有进一步调查。但是: 有没有办法消除生成警告? 我走对了吗?这意味着即使没有头文件,C源代码也可以使用。 一些背景: 我试图在我的Objective-C项目(iPhone)中使用GPL动态C库。由于没有C语言的经验,C代码本身的水平对我来说有点低,无法有效地使
一些背景:
我试图在我的Objective-C项目(iPhone)中使用GPL动态C库。由于没有C语言的经验,C代码本身的水平对我来说有点低,无法有效地使用。然而,C库还包含一些更高级别的示例程序,我可以理解它们在做什么,并且我认为(希望)也会根据我的需要进行修改。这个示例程序只是从shell脚本包装器中激发的源文件。没有头文件。首先,没有C类这样的东西 如果您的意思是只调用C函数,则可以在Objective-C代码中添加函数原型 假设您需要调用一个函数
f
,该函数返回一个int
,并接受在.c
文件中定义的char
参数
在调用函数的.m
文件中,添加以下行:
int f(char);
您将摆脱函数的隐式声明
或者,您可以在自己定制的
.h
文件中编写所有函数原型,以防您决定还需要在其他编译单元中使用这些函数。首先,没有C类这样的东西
如果您的意思是只调用C函数,则可以在Objective-C代码中添加函数原型
假设您需要调用一个函数f
,该函数返回一个int
,并接受在.c
文件中定义的char
参数
在调用函数的.m
文件中,添加以下行:
int f(char);
您将摆脱函数的隐式声明
或者,您可以在自己定制的
.h
文件中编写所有函数原型,以防您决定在其他编译单元中也需要使用这些函数。为什么不为其创建一个头文件呢?目标C是一个C超集,因此,任何有效的C都是有效的目标C。请参考@pablo关于如何做的回答it@Karl克内克特尔:事实上,这是我的第一个想法。当我很累的时候,我凭直觉尝试了一下,并且犯了一些错误,所以我放弃了这个想法。原来我在Xcode中创建的.h文件中有@implementation而不是@interface,我太累了以至于没有注意到:PI已经将我的引用改为“C类”来表示C源等,以避免进一步混淆。为什么不为它创建一个头文件呢?目标C是一个C超集,因此,任何有效的C都是有效的目标C。请参考@pablo关于如何做的回答it@Karl克内克特尔:事实上,这是我的第一个想法。当我很累的时候,我凭直觉尝试了一下,并且犯了一些错误,所以我放弃了这个想法。原来我在Xcode中创建的.h文件中有@implementation而不是@interface,我太累了以至于没有注意到:我已经将我的引用改为“C类”来表示C源代码等,以避免进一步传播混淆。很抱歉称它为“C类”,但我说“没有C体验”=)如果要引用包含函数的文件,您会怎么说?“C实现文件”?@Oskar Lund:正确。您可以说“C源文件”、“C函数定义文件”或“C实现文件”。希望有帮助。否则,谢谢。我为它创建了一个新的头文件,它现在构建时没有错误。仍然崩溃,但我确信这是不相关的。我已经将我的引用更改为“C类”以表示C源等,以避免进一步传播混淆。很抱歉将其称为“C类”,但我说的是“无C体验”=)如果要引用包含函数的文件,您会怎么说?“C实现文件”?@Oskar Lund:正确。您可以说“C源文件”、“C函数定义文件”或“C实现文件”。希望有帮助。否则,谢谢。我为它创建了一个新的头文件,它现在构建时没有错误。仍然崩溃,但我确信这是无关的。我已经将我的引用改为“C类”,称为C源代码等,以避免进一步混淆。