внешняя переменная - почему? - PullRequest
6 голосов
/ 24 мая 2011

Я слышал, что вы не должны определять что-либо в заголовочных файлах из-за возможности множественных определений, но если у вас есть защита, это не должно происходить, верно? Какие еще причины для добавления extern к переменным?

Ответы [ 2 ]

12 голосов
/ 24 мая 2011

Включение защиты просто предотвращает многократное включение заголовка в одну единицу перевода (она же единица компиляции ). Это не решает проблему множественных определений из отдельных единиц перевода во время соединения. Следовательно, вы должны когда-либо помещать объявлений в заголовочные файлы (.h) и определений в исходные (.c) файлы.

1 голос
/ 24 мая 2011

Обычно вы объявляете extern переменные в заголовочных файлах, когда переменная определена в одном исходном файле (точнее, в одной единице перевода ) и на нее ссылаются в другом.

...