Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
混合Objective-c和c:如何使用缺少头文件的c源文件?_Objective C_C - Fatal编程技术网

混合Objective-c和c:如何使用缺少头文件的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项目中使用某些C源代码,但该源代码缺少头文件。我在构建时收到一个“隐式函数声明”警告,但是在我尝试调用其中一个C函数之前,应用程序启动良好,工作正常。现在它崩溃可能是因为我通过的args出现了一些问题,我还没有进一步调查。但是:

有没有办法消除生成警告?

我走对了吗?这意味着即使没有头文件,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源代码等,以避免进一步混淆。