2

私はウェブ上extern int xで、main関数が存在するmain.cにある多くの例に遭遇しました。

私が知っている唯一の用途はextern、別のファイルで宣言を行い、それを定義した後、別のファイルでそれを使用することです。

のように:ああ:extern int x;

交流 :int x = 5;

main.c: #include "a.h" // and start using x

最初のケースは私には冗長に思えます。

externそれで、他のファイルに含まれていないファイルで変数を使用する可能性のある使用法はありますか?

4

4 に答える 4

2

externx別のモジュールに存在し、他の場所からリンクする必要があるコンパイラに通知します。main.cに直接配置すると、ヘッダー(とにかくインラインに含まれる)をプルすることを回避できます。

ヘッダーの場合と同様に、定義されていないx別の.cモジュールに存在する必要があります。 extern

于 2012-10-09T16:29:09.973 に答える
2

extern変数には、基本的に2つの関数があります。1つは他のファイルの変数を使用することで、もう1つは次のコードのようにグローバル変数にアクセスすることです。

int x=10;
int main()
{
     int x=20;
     cout<<x;             //refers to x=20
     if(x==20)
     {
            extern int x;
            cout<<x;      //refers to the global x that is x=10
     }
 }
于 2012-10-09T16:40:50.667 に答える
1

もちろん。ファイルで使用すると、そのexternファイルでその変数を使用できます。他の場所に含める必要はありません。

于 2012-10-09T16:28:57.387 に答える
0

を使用するexternと、オブジェクトに外部リンケージが作成されます。テンプレートをオブジェクト(値やタイプではなく)でインスタンス化するには、オブジェクトに外部リンケージが必要です(少なくともC ++ 03では)。名前空間スコープで定義されたほとんどのオブジェクトにはグローバルリンケージがありますが、constオブジェクトにはありません。だからあなたは次のようなものを持っています:

template <char const* n>
class Toto { /* ... */ };

char const n1[] = "abc";
Toto<n1> t1;    //  Illegal...

extern char const n2[] = "xyz";
Toto<n2> t2;    //  Legal...

これは一種の特殊なケースですが extern、ソースファイルの名前のない名前空間で使用するようになりました(1回または2回)。

于 2012-10-09T17:23:13.903 に答える