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