0

尽管我在 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 的后代,为什么这些例子不起作用?

4

3 回答 3

4

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

于 2013-03-13T10:15:38.787 回答
0

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

于 2013-03-13T12:25:05.767 回答
0

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

但是您犯了一个错误,Objective-C 中没有按引用和默认值。这两种结构都是 C++ 结构,而不是 C 结构。存在 Objective-C 和 C++ 的混合体,称为 Objective-C++。

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

于 2013-03-13T21:44:17.473 回答