如何在objective-c项目中使用纯C文件?

简单的问题:

我创建了一堆C helper例程,并试图将它们包含在项目中。 我曾假设以下内容可以。

MyFuncs.h

typedef struct { float n; } MyStruct; float Operation(MyStruct ms); 

MyFuncs.m

 #import "MyFuncs.h" float Operation(MyStruct ms) { return ms.n * ms.n; } 

但是,我收到链接器错误“架构i386的未定义符号”和“从x引用的操作(MyStruct)”

还有其他方法需要设置标头/实现C文件才能工作吗?

注意:这适用于使用Xcode 4.5的iOS项目。

不,使用纯C没有问题。通常,源文件将命名为*.c而不是*.m ,但将*.c重命名为*.m不应导致错误。

但是,有一个线索:

x引用的Operation(MyStruct)

如果链接器知道函数参数的类型,那是因为你从C ++代码调用函数。 您必须在标题中放置extern "C" { ... } ,如下所示:

 #ifdef __cplusplus extern "C" { #endif typedef struct { float n; } MyStruct; float Operation(MyStruct ms); #ifdef __cplusplus } #endif 

如果您的项目中没有任何C ++(包括Objective-C ++ *.mm文件),那么这不是您的问题。

如果它是纯c,则“MyFuncs.c”而不是“MyFuncs.m”会更好。

使用扩展名.mm调用实现文件,如MyFuncs.mm。