Я столкнулся с предупреждением компилятора:
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_
Использование:
основной.с:
#include "version.h"
// I do not use svn_string_revision here.
// I only use SVN_REVISION_NUMBER
#pragma config IDLOC3=SVN_REVISION_NUMBER
другой файл.с:
#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.h, дополненного файлом version.c, где заголовок объявляет
extern const char *svn_string_revision;
и источник
const char *svn_string_revision = "31";
Но это потребовало бы от меня переписать автоматическую генерацию кода, чего я хотел бы избежать.
Короче, мои вопросы:
- Правильно ли я понимаю предупреждение?
- Как я могу изящно избежать этих предупреждений, учитывая, что я не хочу разбивать version.h на файлы .c и .h