c extern undefined reference [重複]

Sep 02 2020

単純な間違いだと確信して申し訳ありません。しかし、数時間後、私は自分が何を間違っているのか理解できません。extern関数の外部で宣言し、関数内で定義する必要があることを理解しています。しかし、私はそれを機能させることができません。

これが私の最小限のコードエラーです。

extern double d;
int main(void) {
    d = 0;
    return 0;
}
/home/0KzRYK/ccCTD3Lf.o: In function `main':
prog.c:(.text.startup+0x3): undefined reference to `d'
collect2: error: ld returned 1 exit status

回答

1 Akim Sep 02 2020 at 20:41

コメントありがとうございます。私の間違いはextern double d、それがと同じ方法で変数を定義すると仮定することでしたdouble d。しかし、明らかにそうではありません。

これは、少なくとも初心者にとっては、言語の直感的でない特性であると言えます(たとえばextern double、定義ではありませんが、そうstatic doubleです)。

あなたのコメントに続いて、私はこれについて正確に話している関連する質問を見つけました:なぜ 'extern'を使用して変数を作成するのは定義ではなく宣言ですか?

MikeCAT Sep 02 2020 at 20:26

あなたの理解は間違っています。の変数はextern、関数内で定義する必要はありません。ただし、どこかで定義する必要があります(おそらく別のソースファイル)。

例:

main.c:

extern double d;
int main(void) {
    d = 0;
    return 0;
}

d.c:

double d;

コンパイル:

gcc -o main main.c d.c