2015-02-10 43 views
1

我对C很熟悉,现在正在学习Objective-C。函数和函数指针可以在ObjC中使用,就像它们在C中一样?

我经常使用的函数指针

void (*callback)(int*restrict, char*restrict) 

这会否是可用在Objective-C?特别是在结构,像这样:

struct mytype myvar = { 
    .first = myCallback; 
    .second = myCallback2; 
} 

而且,我希望有函数原型样

void function(int * restrict a, char * restrict b); 
char * function (char * a); 
... 

是否有使用这种风格没有问题?

+1

目的-C(针对iOS/Xcode的)的[通过铛支持](http://clang.llvm.org/docs/UsersManual.html)和 “C”,它支持..“Clang旨在支持包括C,Objective-C在内的C语言编程语言系列。除了这些基本语言及其方言外,Clang还支持各种语言扩展......以与GCC兼容,Microsoft和其他流行的编译器,并通过Clang特有的功能改进功能。“ – user2864740 2015-02-10 19:22:52

+1

App Store合规性在这里是无关紧要的,所以我已经编辑了您的问题,严格限定您感兴趣的语法和语言功能。有关详细信息,请参阅[以开发人员为中心的问题堆栈溢出?](http://meta.stackoverflow.com/q/175701) – 2015-02-10 20:09:17

+0

@Josh:谢谢你的链接。将挖掘到它:) +1 – Larry 2015-02-10 20:29:56

回答

0

是的。

您可以使用您在Objective-C应用程序中选择的任何C策略。您仍然需要编写一些Objective-C来启动您的UIApplication(或使用第三方工具为您完成)。

有一点要记住,虽然是int会根据机器上的不同长度,你应该明确地选择int32_tint16_tint8_t如果你真的不想使用NSIntegertypedef抽象此机器差异。

+0

绝对伊恩,uint32_t,int32_t等是我的朋友。尼斯。没有角落案件要知道? – Larry 2015-02-10 19:28:24

+0

我还没有找到。如果你遇到任何奇怪的事情,请告诉我。 – 2015-02-10 19:37:23

+0

即使只是稍微想要,也可以使用它们。 ObjectiveC是C的一个严格的超集。所以被接受的答案应该是一个明确的YES。ps BOOL也与32-64 bit有着根本的区别,因为32bit的BOOL实际上比C的bool更早。 – Jef 2015-02-10 23:19:55

4

Clang(Xcode使用的默认编译器)声明C11支持Objective C(请参阅Language Compatibility)。

这意味着函数指针,限制,结构和声明都将按照您所期望的那样工作。

建议一句话:不打架系统;它会为你自己创造更多的工作,并为你的用户创造更不可靠的软件。程序员应该像水一样。

清空你的心灵,无形,无形 - 像水。现在你把水放在杯子里,就成了杯子;你把水放进瓶子里就成了瓶子;你把它放在茶壶里就成了茶壶。现在水可以流动,也可能会崩溃。水,我的朋友。

- Bruce Lee

+0

永远不要停下脚步,粉碎你所能做到的一切,而且会变得很邪恶:杀死他的水肿。两个愿景。同样的目标。但我明白你的观点:) – Larry 2015-02-10 19:48:46

相关问题