Цитата(_Макс @ Apr 22 2010, 19:22)

Прочитал вот это:
Еще есть статические члены классов. Там совсем другая семантика. А ключевое слово используется это же.
Цитата(_Макс @ Apr 22 2010, 19:22)

По поводу локальных, все понятно. Остаюсь в недоумении зачем глабальную переменную объявлять, как static если int a; и так глобальная, между вызовами не меняется и без extern действует только в пределах файла.
Чтобы гарантировать, что объект за пределами данной единицы трансляции недоступен. Например, если есть библиотека в скомпилированном виде, то ничего не мешает, зная имена, получить к ним доступ, объявив их как extern. Еще для того, чтобы намеренно ограничить область видимости пространством имен данной единицы трансляции - например, в одном файле есть static int a, в другом тоже есть int a, глобальная. Это будут разные объекты.
Еще конкретно в С (не в С++) имеет смысл объявлять константы в заголовочных файлах как static const - при этом константа будет иметь гарантировано внутреннее связывание, что позволяет компилятору не размещать ее в памяти, а просто использовать значение.