Чтобы избежать множественного определения переменных в C++, можно использовать следующие рекомендации:
- Объявлять, а не определять переменные в заголовочных файлах. 4 Если определить переменную в заголовочном файле, который включается в несколько исходных файлов, то каждым включением создаётся отдельное определение. 3
- Использовать ключевое слово extern для глобальных переменных. 34 В заголовочном файле нужно объявить переменную с помощью extern, а определить её — в одном исходном файле. 3
- Использовать заголовочные гварды. 4 Они предотвращают множественные включения заголовочных файлов. 4
- Осмотрительно использовать встроенные функции. 4 Встроенные функции и переменные — исключение из правила одного определения: они могут быть определены несколько раз в программе, но только единожды в одной единице трансляции. 1
- Проверять порядок обработки файлов компоновщиком. 3 Если зависимость между файлами не обработана должным образом, символы могут разрешаться некорректно. 3
- Контролировать видимость символов. 3 В крупных проектах, особенно с общими библиотеками, важно экспортировать только нужные символы. 3 В C++ видимость символов контролируется атрибутами или макросами. 3