A.h
を定義するヘッダーファイルがありますconst int ID = 4;
。このヘッダーファイルをCファイルA.c
とにインクルードしmain.c
ました。ヘッダーガードなどを使用しましたが、コードをコンパイルしようとすると#ifndef A_H #define A_H
エラーが発生します。multiple definition of ID
ほとんどの場合、これを使用することで回避できることをどこかで読みましたが、#pragma once
それでもエラーが発生します。私の質問は、Cで変数を定義するにはどうすればよいですか?IDの定義をCファイルに移動する必要がありますが、使用するすべてのファイルでそれを宣言する必要がありますか?またはextern
、この状況で唯一の方法を使用しますか?
2 に答える
2
C では、オブジェクトごとに 1 つの定義しか許可されていません。.o
複数のファイル(コンパイルユニット)がある場合、ガードなどを含めても役に立ちません。それぞれにコピーがありますが、これは許可されていません。
そのオブジェクトのアドレスが必要なく、その定数値のみに関心がある場合は、次のように置き換えることができます
enum { ID = 4 };
これは、ヘッダー ファイルに簡単に配置できるID
型の名前付きの値を定義します。int
于 2012-09-10T15:58:35.310 に答える
1
はい、使用するextern
ことが唯一の解決策です。pragma
または include ガードが同じ翻訳単位に複数含まれるのを防ぎます。これは複数定義エラーです。
于 2012-09-10T15:55:29.220 に答える