2
EXTERN(void) jpeg_fdct_8x4
JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));

ここで、次の 4 つの質問がありました。

  1. 構文 Extern(Void) とはどういう意味ですか? 戻り値は無効ですか?それは通常の構文ですか?

  2. static キーワード、inline キーワード、no キーワード、extern キーワードを使用したサードパーティ コードの非クラス メンバー関数が表示されます。static キーワードが関数の範囲をファイルに制限することを理解しています。「キーワードなし」を使用するとどうなりますか? その関数を使用するには、他のファイルで extern を使用する必要がありますか、または関数宣言を指定した後、別のファイルから直接関数を呼び出すことができますか?

  3. C とのインターフェイスを呼び出すためだけに C++ で extern が必要ですか?

  4. インライン関数のデフォルトのスコープは?

4

2 に答える 2

2

EXTERN(n)はプリプロセッサの定義で、次の場所にありますjmorecfg.h

  #define EXTERN(type)            extern type

したがって、上記のステートメントは次のように展開されます

  extern void ...

externC コードでの記述については、この回答を確認してください。

「キーワードなし」を使用するとどうなりますか?

この場合、範囲は限定されません。非静的でグローバルな関数の名前は、すべてのコンパイル ユニットでリンカに表示されます。つまり、異なるモジュールが同じ関数名を使用すると、名前の衝突が発生します。

3) C とのインターフェイスを呼び出すためだけに C++ で extern が必要ですか?

おそらくextern "C" {}、コンパイラに C 呼び出し規約を使用するように指示するものを参照します。はい、これは C++ から外部 C 関数を呼び出すために必要です。

4) インライン関数のデフォルトのスコープは?

宣言されていない場合と同じスコープinline

于 2012-08-27T05:00:15.773 に答える