我想在Xcode项目中使用一些C ++代码,但我还不了解任何一种语言,但还不知道如何继续。我已经在Obj-C工作了一段时间,并在应用程序商店中有一个应用程序,但仍在学习......
我想要使用的代码包含两个名称相同且.h
和.c
扩展名的文件。我认为它们与Obj-C中的.h
和.m
文件相对应,但它们缺少我熟悉的@interface
和@implementation
结构。还有main.c
,我不知道该怎么做。它看起来像是主程序 - 我应该尝试将其代码放入我的主要viewController
吗?
也许链接到一个好的教程?也许这个问题太模糊了......
仅供参考 - 我想用的代码用于计算日出和日落时间,位于:http://www.risacher.org/sunwait/
谢谢!
编辑:
感谢您的建议 - 在我得到这个建议之前,我可能还需要做更多的学习。但我取得了一些进展......
在main.c
中(有一个名为that的文件似乎很奇怪),有一个像这样的函数(?):
int mainFunction(int argc, char *argv[])
{
// a bunch of function-y stuff
}
它被称为main
,但我将其更改为mainFunction
以消除错误。现在它编译,我可以调用它,但编译器因此警告我:warning: implicit declaration of function 'mainFunction'
并且在我调用它之后崩溃。
答案 0 :(得分:2)
现在它编译并且我可以调用它但是编译器因此警告我:警告:隐式声明函数'mainFunction'并且在我调用它之后崩溃。
这是因为,在使用此函数的地方,您不会转发声明或包含函数的声明。在Objective-C代码中,您应该添加以下代码:
int mainFunction(int argc, char *argv[]);
另请注意,“。c”文件扩展名是C代码,而不是C ++。由于Objective-C是C的超集,您可以轻松地将扩展名更改为“.m”,并且由于需要此前向声明,您仍然会得到相同的错误。在进入Objective-C世界之前,我强烈建议您熟悉C和C ++代码。如果您希望放弃学习C ++,那么至少应该在进入Objective-C之前加强您的C知识,因为C基础知识适用。
答案 1 :(得分:1)
Objective-C 2.0指南中有一章: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html#//apple_ref/doc/uid/TP30001163-CH10-SW1
基本上你可以混合使用C ++和Objective-C,但是有一些陷阱。在探索objective-C ++
的细微差别之前,您可能需要了解更多关于C ++的知识答案 2 :(得分:1)
将源从.m重命名为.mm,然后它们变为Objective C ++。您可以从Objective C代码实例化和调用C ++类,反之亦然。但是,您不能从C ++类派生ObjC类,反之亦然。另外,请注意调用约定 - .m文件中的全局函数是extern "C"
,就.mm / .cpp文件而言。
将.mm和.cpp链接在一起工作正常。
答案 3 :(得分:1)
首先,如果您的文件具有.c
扩展名,那么它们几乎肯定是C而不是C ++。您所要做的就是将它们添加到项目和目标中,并将相关的.h
文件包含在您调用C函数的Objective-C中。
现在您曾经拥有一个名为main()
的函数这一事实告诉我们您有一个独立程序。每个独立程序都必须有一个名为main()
的函数,它是程序的入口点。您的Objective-C应用程序将具有函数main()
,这就是您收到错误的原因。您可以采用重命名方法并调用它,但这种方法存在许多缺陷。
如您所知,您需要一个函数原型来停止隐式声明警告。这应该是
int mainFunction(int argc, char* argv[]);
并且应该在您要在其中调用的.m文件中包含的标题中。
在C中,对参数进行了某些假设。 argc
是argv中char*
的数量。 argv[0]
通常是在命令行上调用的程序的名称。因此argc
必须至少为1,argv[0]
必须指向字符串。 argv中剩余的char*
指向命令行参数。
我建议你通过C语言的基础知识来理解它。您可以在一两天内学到足够的知识来推进您的项目。经典文字是The C Programming Language。它仍然是最好的恕我直言。
答案 4 :(得分:0)
遗憾的是,关于此的教程并不多。我认为这已经在stackoverflow中被问了几次,所以在这里搜索会给你一些提示。您要避免的第一个陷阱是,您需要为obj-c文件使用“.mm”扩展名来启用c ++扩展。
最后一个指针是,查看开源项目,例如chrome看看他们如何混淆obj-c和C ++。谷歌搜索也是你的朋友:)。