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