关于Cocoa c风格函数的一些愚蠢问题



尽管我在Cocoa中开发了多年,但我从来没有开发过一种c风格的库来处理非对象变量。

我所说的"c风格的函数"是,例如:
float myCStyleFunction(float var1, float var2);

知道Objective-C是C的后代,我试图做一个真正的C函数。但是一些简单的事情是编译器不允许的。

首先是引用传递:

void makeSomethingWithImages(CGImageRef & im1, CGImageRef & im1);

这行不通。编译器说Parameter name omitted是否有一种方法通过引用我的CGImages?

其次,默认参数:
void makeSomethingWithImages(CGImageRef im1, CGImageRef im1, float tolerance) { ... }
void makeSomethingWithImages(CGImageRef im1, CGImageRef im1) {
    makeSomethingWithImages(im1, im2, 0);
}

错误:Conflicting types for 'makeSomethingWithImages'

是否有办法有一些默认参数?

和附属问题:如果Obj-C是C的后代,为什么这些例子不起作用?

通过引用传递是c++而不是C,默认参数和函数重载也是如此,尽管clang为C添加了函数重载的扩展,但有额外的语法

通过引用传递应使用- *符号(指针指向地址), &是"值在地址",CGImageRef被定义为CGImage.h类中的CGImage *CGImageRef;,因此编译器Err.

不,你不能使用引用传递机制,也不能使用C中的参数默认值。如果Obj-C是C的后代,这意味着Obj-C编译接受合法的C代码,而不是相反。

但是你犯了一个错误,引用和默认值在Objective-C中是不可用的。这两个结构都是c++的,而不是C的。存在Objective-C和c++的混合,它被称为objective - c++。

c++和Objective-C都是C的后代,所以混合。

最新更新