何らかの理由で、ヘッダーガードを使用していても、ヘッダーファイル内に複数の宣言があります。私のコード例は以下の通りです:ヘッダー/インクルードガードが機能しません。
のmain.c:
#include "thing.h"
int main(){
printf("%d", increment());
return 0;
}
thing.c:
#include "thing.h"
int increment(){
return something++;
}
thing.h:
#ifndef THING_H_
#define THING_H_
#include <stdio.h>
int something = 0;
int increment();
#endif
私はこれをコンパイルしようとすると、 GCCは、私は何かの変数の複数の定義を持っていると言います。 ifndefはこれが起こらないことを確認する必要があるので、私はなぜそれが混乱しているのですか。
*コンパイラのエラー "multiple * declarations *"は*リンカ*エラーの "multiple * definitions *"と同じではありません。あなたはあなたの質問に(実際に唯一の問題が後者です)両方を挙げました。その違いを理解することは、何がうまくいかないのかを理解する上で重要です。ヘッダーガードは複数の*宣言*ではなく複数の*宣言*を防ぎます。 – Clifford
@Clifford申し訳ありませんが、私はリンカーのエラーを取得していたと述べたはずです。 – user1007968
また、C 'int increment();はプロトタイプではありませんが、不特定多数のパラメータを持つ関数を宣言しています。それには 'int increment(void);'を使います。 –