0

以下のコードが機能しないのはなぜですか? 説明してください。

#include<stdio.h>
#include<stdlib.h>

int main(int number, char arg[])
{
    extern int i;
    i = 5;
    printf("%d",i);
    return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main(int number, char arg[])
{
    extern int i;
    i = (int) malloc(sizeof(int));
    i = 5;
    printf("%d",i);
    return 0;
}
4

4 に答える 4

2

extern変数が存在するが、まだ定義されていないことを指定するために使用されます。変数を作成するのではなく、変数が存在することをコンパイラに指定するだけです。そうでない場合、リンク時にエラーが発生します。

extern キーワードについてもっと読むことをお勧めします

簡単な使用例は 2 つの.cファイルで、1 つは extern 変数をグローバルとして、もう 1 つはこの変数を出力します。

file.c

int value = 5;

main.c

int main() {
  extern int value;

  printf("%i\n", value);
  return 0;
}

これを使用してコンパイルすると、gcc file.c main.c出力されます5

于 2012-10-21T14:51:10.970 に答える
0

Extern 変数の値は、それらが定義されている関数の外部から定義する必要があります。

于 2012-10-21T14:50:51.180 に答える
0

書くとき

extern int i;

i という名前の変数を宣言しているだけです (定義はしていません)。iプログラムのどこかで定義する必要があります。たとえば、直後mainまたは別の.cファイルにある可能性があります

int main(int number, char* arg[])
{
    extern int i;
    i = 5;
    printf("%d",i);
    return 0;
}
int i; //here you define i
于 2012-10-21T14:51:12.180 に答える
0

このexternキーワードは、デフォルトで (たとえば初期化子を除いて) 変数の宣言を提供します。変数を定義する必要があります。内部リンケージを持つには:

#include <stdio.h>
#include <stdlib.h>

static int i;

int main(int number, char arg[])
{
    extern int i;
    i = 5;
    printf("%d",i);
    return 0;
}

そして外部リンケージ:

#include <stdio.h>
#include <stdlib.h>

int i;

int main(int number, char arg[])
{
    extern int i;
    i = 5;
    printf("%d",i);
    return 0;
}

こちらもご覧ください

C11 (n1570)、§ 6.2.2 識別子のリンケージ
その識別子の以前の宣言が可視であるスコープ内のストレージ クラス指定子 extern で宣言された識別子の場合) 前の宣言が内部リンケージまたは外部リンケージを指定している場合、後の宣言の識別子は、前の宣言で指定されたリンケージと同じです。前の宣言が表示されない場合、または前の宣言でリンケージが指定されていない場合、識別子には外部リンケージがあります。

于 2012-10-21T14:57:09.587 に答える