-1

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、この状況で唯一の方法を使用しますか?

4

2 に答える 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 に答える