Мы говорим компилятору заменить все экземпляры SQLITE_EXTERN на ключевое слово "extern", когда он предварительно обрабатывает файлы. Следовательно, если вы включаете заголовок sql, который содержит объявление как показано ниже
SQLITE_EXTERN тип данных sql_variable;
компилятор обрабатывает ее как переменную "extern" и не выделяет память для переменной.
EDIT:
Чтобы добавить к этому, принято объявлять переменные с "extern" в заголовочных файлах и определять переменные в файле cpp. Определение переменных в заголовочных файлах без квалификатора "extern" выделит место для переменной везде, где включен заголовочный файл!
Переопределение экстерьера:
#define выше предоставляет вам возможность инициализировать переменные sql так, как вам нравится. Смотрите ссылку http://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.71).aspx для более подробной информации об инициализаторах. В статье есть утверждение ->
Объявления автоматических, регистровых, статических и внешних переменных могут содержать инициализаторы. Однако объявления внешних переменных могут содержать инициализаторы, только если переменные не объявлены как extern.
Если вы как-то хотите переопределить внешнее объявление переменной sql и хотите инициализировать его самостоятельно, вы можете просто определить
#define SQLITE_EXTERN
Одна из причин переопределения этого заключается в том, что Sqlite является кроссплатформенным (очень широко), некоторые из платформ могут не поддерживать хорошо ключевые слова extern, поэтому мы должны иметь гибкость, чтобы отключить это.
и инициализируйте переменные так, как вы хотите. Надеюсь, это поможет!