2012-04-03 14 views
0

は、私は次のような方法の一つが定義されているCソースファイルがありますか?私の知っている限りでは、「無効」は何も返されません。それで、法的声明ですか?無効と戻り値の型

+1

GoはQDECLの定義を見つけることはまだある

void static prettyPrintf(int level) 

ある

#define QDECL static 

されている可能性が大会](http://en.wikipedia.org/wiki/Calling_convention)。戻り値の型とは何も関係ありません。 –

+0

私はそれについて聞いたことがありませんが、それは__cdeclのエイリアスのようです。 –

+0

私の心配はここにあります。上記のコードをJavaに移植すると、これを処理する必要がありますか? – UVM

答えて

1

QDECLの定義を確認しました。それは、

#define QDECL __cdecl 

は、今すぐあなたの宣言はなりまだ voidを返す関数である

void __cdecl prettyPrintf(int level) 

です。

実際、QDECLは、関数の戻り値の型を変更せずに(理論的に)他の形式をとることができます。呼び出し[それが展開するだろう - それは簡単に今、あなたの関数のプロトタイプがvoid返す関数

1

QDECLは、呼び出し規約を定義します。これは、ヘッダファイルの1つに定義されたマクロで、__cdeclまたは__stdcallのように評価されます。

これは、関数の戻り値の型に関係しません。この機能はまだvoidの機能です。コメントで

あなたの状態:ここ

私の関心は、JavaへのIポートが上記のコードならば、私はこれの世話をする必要がないということですか?

いいえ。これは純粋に異なるネイティブのコードライブラリ間のインタフェースとしての問題です。コードがJavaになったら、単に呼び出し規約を無視できます。

+0

実行時にどのような利点がありますか?パフォーマンスの向上は?またはそれは専門家のコーディングスタイルですか? – UVM

+0

@UNNIパフォーマンスや利点、コーディングスタイルの問題ではありません。あるライブラリと別のライブラリの間でバイナリコントラクトを定義する必要があります。これは共有ライブラリにエクスポートされる関数です。したがって、すべての当事者は、関数を呼び出すときに同じ規則を使用する必要があります。呼び出し規約はそれらの規則をコード化します。これを読んでください:http://en.wikipedia.org/wiki/Calling_convention –

2

QDECLはおそらくcalling conventionのヒント(たとえば__cdeclまたは__stdcall)に解決されるプリプロセッサマクロです。これは、コールスタックにパラメータをプッシュ/クリーンアップする方法を定義しますが、関数の戻り値の型は変更しません。クライアントとは異なるデフォルトの呼び出し規約を使用するライブラリを使用する場合、主に相互運用性のために使用されます。

関連する問題