Цитата(dxp @ Apr 22 2010, 16:08)

Чтобы гарантировать, что объект за пределами данной единицы трансляции недоступен. Например, если есть библиотека в скомпилированном виде, то ничего не мешает, зная имена, получить к ним доступ, объявив их как extern. Еще для того, чтобы намеренно ограничить область видимости пространством имен данной единицы трансляции - например, в одном файле есть static int a, в другом тоже есть int a, глобальная. Это будут разные объекты.
Кстати вопрос на эту тему:
что предпочтительнее с точки зрения крастоты/правильности кода употреблять: non static object и extern где нужно или static но с геттером типа "(const) object* get()" ? (язык си имеется ввиду)
Способен ли умный компилятор подставлять реальный адрес объекта вместо вызова этого get?