0

私はCocoaで何年も開発を行っていますが、非オブジェクト変数を操作するための一種のCスタイルのライブラリを開発する必要はありません。

私が「Cスタイルの機能」と呼んでいるものは、たとえば次のとおりです。

float myCStyleFunction(float var1, float var2);

Objective-CがCの子孫であることを知って、私は実際のC関数を作成しようとしていました。しかし、いくつかの単純なことは、コンパイル者によって許可されていません。

まず、参照渡し:

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

これは機能しません。コンパイラは言うParameter name omittedCGImagesを参照渡しする方法はありますか?

次に、デフォルトのパラメータ:

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定義されているため、コンパイラ エラー..CGImage *CGImageRef;CGImage.h

于 2013-03-13T12:25:05.767 に答える
0

いいえ、参照渡しメカニズムも、C の引数のデフォルト値も使用できません。Obj-C が C の子孫である場合、これは、逆ではなく、正当な C コードが Obj-C コンパイルによって受け入れられることを意味します。

しかし、あなたは間違いを犯しました。Objective-C では、参照による値とデフォルト値は使用できません。これらの構造はどちらも C++ のものであり、C のものではありません。Objective-C と C++ が混在しており、Objective-C++ と呼ばれています。

C++ と Objective-C はどちらも C の子孫であるため、混在しています。

于 2013-03-13T21:44:17.473 に答える