3

ヘッダー ファイルで関数プロトタイプを宣言すると、'extern' キーワードをまったく使用していなくても、プログラムのあらゆる場所に到達できます。それらは静的ライブラリに対してのみ重要ですか、それともいつ必要ですか?

4

4 に答える 4

5

機能はexternデフォルトです。キーワードは、extern変数に対してのみ有効です。

于 2013-01-31T14:19:12.193 に答える
2

extern は、C のデフォルトのストレージ クラス指定子です。

変数に明示的に指定する

extern int i;

モジュール間で共有できる場合。それで

int i;

他のモジュールでは ODR に違反しません。

関数については、はい、かなり役に立ちません。

于 2013-01-31T14:19:32.450 に答える
1

関数宣言の場合、それらは必須ではありません。これらは、外部グローバル変数を宣言するためにのみ必要です。

// header
extern int foo;

// implementation (.c)
int foo;

がないexternと、コンパイラはグローバル変数を検出するたびにインスタンス化し (ヘッダーが含まれているため)、リンカー エラーが発生します。

このキーワードのもう 1 つの使用例は、C コードを C リンケージとして指定することで、C コードを C++ 互換にすることです (これにより、リンカ エラー、つまり C++ 名マングリングによって引き起こされるエラーが再び防止されます)。

#ifdef __cplusplus
extern "C" {
#endif

void foo(void);

#ifdef __cplusplus
}
#endif
于 2013-01-31T14:20:15.777 に答える
0

デフォルトでは、すべての関数はextern ..

Extern キーワードは、変数にのみ使用されます。

于 2013-01-31T15:15:52.977 に答える