C言語で「redeclaration of ‘xxx’ with no linkage」というエラーメッセージが表示された場合、それは同じ名前の変数が再定義されているが、それらがリンケージを共有していないということを意味します。
例えば、次のようなコードでこのエラーが発生する可能性があります。
#include <stdio.h> int main(void) { int x = 5; { int x = 10; // エラーが発生する行 } printf("x = %d\n", x); return 0; }
この例では、ブロック内で変数x
が再定義されていますが、それらがリンケージを共有していないため、このような再定義は不正です。このような場合、コンパイラは「redeclaration of ‘x’ with no linkage」というエラーメッセージを出力します。
このような場合、変数を再定義する際には、それらがリンケージを共有するようにプログラムを修正することで、このエラーは解消されます。
#include <stdio.h> int main(void) { extern int x; // 修正後 int x = 5; { int x = 10; } printf("x = %d\n", x); return 0; }
この例では、ブロック内で定義される変数x
が外側の変数x
とリンケージを共有するように、外側の変数x
をexternで宣言しました。
コメント