尽管我在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后代,为什么这些例子不起作用?
答案 0 :(得分:4)
通过引用传递是C ++而不是c所以是默认参数和函数重载,虽然clang为函数重载添加了c的扩展,但是有额外的语法。
答案 1 :(得分:0)
通过引用传递时应使用 - *
表示法(指向地址的指针),&
是“地址值” ,CGImageRef
在CGImage *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的后代,所以混合。