Мои самые основные знания C и процесс компиляции в последнее время стали ржавыми. Я пытался выяснить ответ на следующий вопрос, но я не мог подключить основы фазы компиляции, ссылки и предварительной обработки. Быстрый поиск в Google тоже не помог. Итак, я решил прийти к окончательному источнику знаний :) Переменные определения в заголовочных файлах
Я знаю: переменные не должны быть определены в заголовочных файлах. Его можно объявить там.
Почему: Поскольку заголовочный файл может быть включен из нескольких мест, таким образом переопределяя переменную более одного раза (компоновщик дает ошибку).
Возможная обход: Используйте заголовочные щитки в файлах заголовков и определяйте переменную в этом.
Действительно ли это решение: Нет. Поскольку заголовочные щитки предназначены для предварительной обработки. То есть сообщить компилятору, что эта часть уже включена и не включает ее еще раз. Но наша ошибка множественного определения появляется в компоновщике - многое после компиляции.
Вся эта вещь меня путала с тем, как преобработка & связывает работу. Я думал, что предварительная обработка будет просто не включать код, если был определен символ защиты заголовка. В таком случае не должно быть решено многократное определение переменной проблемы?
Что происходит с тем, что эти директивы предварительной обработки сохраняют процесс компиляции из переопределения символов под заголовками, но компоновщик все еще получает несколько определений символа?
yikes ... это было на самом деле просто :) – Methos