【C言語】redeclaration of ‘xxx’ with no linkage

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で宣言しました。

コメント

タイトルとURLをコピーしました