コンパイラの警告が表示されました:
version.h:47: warning: (1478) initial value for "_svn_string_revision" differs to that in version.h:47
対応する version.h ファイルは次のようになります。
#ifndef _VERSION_H_
#define _VERSION_H_
#define SVN_REVISION_NUMBER 31
const char *svn_string_revision = "31"; // line 47
#endif //_VERSION_H_
使用法:
main.c:
#include "version.h"
// I do not use svn_string_revision here.
// I only use SVN_REVISION_NUMBER
#pragma config IDLOC3=SVN_REVISION_NUMBER
otherfile.c:
#include "version.h"
// still no usage of svn_string_revision, only this:
EUSART_Write(SVN_REVISION_NUMBER);
これまでのところ、これは説明的で明確です。問題は、const char 文字列がヘッダー ファイルで定義されており、複数のソース コード ファイルに含まれていることだと思います。したがって、コンパイラは複数の「svn_string_revision」変数を認識し、それを再宣言として扱います。ただし、通常、値は常に同じである必要があります。私の version.h ファイルは、すべてのビルドの前に再生成される自動生成ファイルです。
誰かが以前にこれに遭遇したことがありますか? どうすれば対処できますか? クリーンなアプローチは、version.c で補完された version.h ファイルを使用することです。ここで、ヘッダーは次のように宣言します。
extern const char *svn_string_revision;
とソース
const char *svn_string_revision = "31";
しかし、これには自動コード生成を書き直す必要があり、これは避けたいと思います。
簡単に言えば、私の質問は次のとおりです。
- 警告に対する私の理解は正しいですか?
- version.h を .c と .h ファイルに分割したくない場合、これらの警告を適切に回避するにはどうすればよいですか