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で宣言しました。
 
  
  
  
  
コメント