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

时间:2013-03-13 10:05:39

标签: objective-c c cocoa

尽管我在Cocoa中开发多年,但我从来没有必要开发一种用于处理非对象变量的C风格的库。

我称之为“C风格的功能”,例如:

float myCStyleFunction(float var1, float var2);

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

首先是传递参考:

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

这不起作用。 Compilator说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后代,为什么这些例子不起作用?

3 个答案:

答案 0 :(得分:4)

通过引用传递是C ++而不是c所以是默认参数和函数重载,虽然clang为函数重载添加了c的扩展,但是有额外的语法。

答案 1 :(得分:0)

通过引用传递时应使用 - *表示法(指向地址的指针),&是“地址值” ,CGImageRefCGImage *CGImageRef;类中定义为CGImage.h,因此编译器为Err ..

答案 2 :(得分:0)

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

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

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