1

重複の可能性:
C++ の外部リンケージと内部リンケージとは

の重要性を知りたいのですextern

最初に私はいくつかのコードを書きました:

file1.h

extern int i;

file2.c

#include<stdio.h>
#include "file1.h"
 int i=20;
int main()
{
   printf("%d",i);
   return 0;
}

ここで私の質問は次のとおりです。 iinを定義する必要がある場合のfile2.cextern変数の使用は何ですかfile1.h

スーダンシュ

4

7 に答える 7

6

extern変数を定義 (存在させる) せずに、変数を宣言 (コンパイラーにその存在を通知) することができます。原則として、宣言は何度でもできますが、定義できるのは 1 回だけです。

これは、たとえば、別の場所で定義する場合に便利です。

検討:

file1.c:                   file2.c:
    extern int xyzzy;          int xyzzy;
    void fn (void) {
        xyzzy = 42;
    }

これらの 2 つの関数をリンクすると、 で定義されたが 1 になり、それが変更されます。xyzzyfile2.cfn

がなくてもそれが起こるようになりましたextern。が行うことは、エラーが発生しないように存在するexternことを宣言することです。xyzzy file1.cI don't know what the blazes "xyzzy" is

特定のケース (それらが 2 つのファイルのみの場合) では、必要ありません。dしてアクセスしようとした別のファイルがある場合にのみ必要です。#includefile1.hi

于 2012-04-10T07:04:22.363 に答える
3

ウィキペディアから:

変数が定義されると、コンパイラはその変数にメモリを割り当て、場合によってはその内容を何らかの値に初期化します。変数が宣言されている場合、コンパイラは変数を別の場所で定義する必要があります。宣言は、その名前と型の変数が存在することをコンパイラーに通知しますが、コンパイラーはその変数が別の場所に割り当てられているため、その変数にメモリーを割り当てる必要はありません。

Extern は、変数を明示的に宣言する方法、または定義なしで宣言を強制する方法です

ファイル 1 に変数が定義されている場合、別のファイルで同じ変数を使用するには、変数を宣言する必要があります。ファイルの数に関係なく、この変数は 1 回だけ定義されますが、定義を含むファイル以外のファイルで宣言する必要があります。

プログラムが複数のソース ファイルにあり、変数が file1 で定義され、file2 と file3 で使用されている場合、変数の出現箇所を接続するには、file2 と file3 で extern 宣言が必要です。

于 2012-04-10T07:12:54.050 に答える
3

次の 3 つのファイルがある場合に便利です。

foo.h

extern int i;
void bar();

交流:

#include "foo.h"
int i = 6;
int main(){
    bar();
}

紀元前:

#include "foo.h"
void bar(){
      printf("%d\n", i);
}

ご覧のとおり、iは と の両方で共有されてa.cおり、キーワードb.cがない場合のようにファイルごとに再定義されるわけではありません。extern

于 2012-04-10T07:05:18.857 に答える
3

C の「extern」宣言は、グローバル変数の存在とその型があることを示すためのものです。

C では、ほとんどの場合、各 .c ファイルが個別のモジュールのように動作します。したがって、「extern」を含む変数は、現在のモジュールの外部で定義されたものです。

グローバルを 1 か所で定義してから、他のすべての場所でそれへの extern 参照を宣言することを常にお勧めします。共有ライブラリによって提供されるグローバルを参照する場合、これは、コードが変数の正しく共通のインスタンスを参照していることを確認するために重要です。

于 2012-04-10T07:09:29.370 に答える
1

extern キーワードを使用すると、コンパイラに「この変数を今すぐ使用してください..後で定義して初期化します」..つまり、「今すぐコンパイルしてください..後でその定義にリンクします」と言うことができます。

変数を他のファイルで定義し、現在のコンテキストで使用する場合は、変数を外部化できます。

于 2012-04-10T07:14:16.140 に答える
1

ヘッダー内の宣言により、変数を 1 か所で定義するだけで、複数のソース ファイルから変数にアクセスできます。

于 2012-04-10T07:39:19.073 に答える
1

extern を持つことは、コンパイラに変数の宣言であることを伝えます。

file1.h の例で、 extern キーワードを指定しなかった場合にどうなるか想像してみてください。int i には 2 つの定義があるように見えます。また、ヘッダー ファイルは多くの .c ファイルに含めることができます。これらの .c ファイルをコンパイルしてリンクすると、リンカーは同じ変数の複数の定義を認識します。

于 2012-04-10T07:05:02.887 に答える