ロギングシステムを記述していて、モジュール内に配列を格納して変更したいのですが(適切な名前のヘッダファイルfoo.hを付けてfoo.cとしましょう)、メインのコンテンツにアクセスできますfoo.cのでは私が持っている:があるC内の別のモジュールでextern配列を宣言する
unsigned char log[4096] = {0};
main.cのながら、次のようにエラーが生じ
#include "foo.h"
int main(){
extern unsigned char log[4096];
// code
return 0
}
:
error: 'log' redeclared as different kind of symbol
が、私はこの権利をしています?私はexternログを "log []"と "log"と宣言しようとしましたが、どちらも有用ではありませんでした。この問題に関する少しの啓発が役立つだろう。ありがとうございました!
変数が定義されているファイルとそれを使用するファイル(ヘッダーには 'foo.h'、ヘッダーには' foo.h'、 'main.c'がどこで使用されているかについて定義されています)。これにより、必要なクロスチェックが可能になります。通常のCソースファイルに 'extern'を書き込むべきではありません。ヘッダーにのみ表示する必要があります。 'extern 'と書かなければならないと思うところでは、あなたが使っているはずのヘッダーを使用していないか、ヘッダーが不完全であることを意味します。どちらも長期的なメンテナンスの問題につながります。 –
ヘッダーに変数を宣言しません。すべてのCファイルに、コンパイラがその変数を配置するヘッダをインクルードします。開発者がヘッダーにグローバル変数を宣言し、ヘッダーが2つの異なるCファイルで使用されたため、私はoldwrプロジェクトで非常に厄介なバグを起こしました。 – Sitram