我遇到了编译器警告:
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_
用法:
主.c:
#include "version.h"
// I do not use svn_string_revision here.
// I only use SVN_REVISION_NUMBER
#pragma config IDLOC3=SVN_REVISION_NUMBER
其他文件.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 文件,我该如何优雅地避免这些警告