Ответ 1
Действительно, "нет связи" в области функций.
Цель - управление жизненным циклом: статичность имеет время жизни глобального статического элемента, в то время как она имеет видимость (область видимости) локального.
Примечание
В С++ вы также можете объявить статику ( "глобальные" ) без привязки, заключая их в анонимное пространство имен. Этот трюк обычно используется в библиотеках только для заголовков:
namespace /*anon*/
{
void foo() {} // only in this translation unit
int answer = 42; // this too
}
Что произойдет, если я использую
extern
?
Если вы используете extern, объявление является только объявлением extern
(ничего не определено). Как таковой, обычно можно ожидать, что внешняя связь по определению будет определена в другой единицы перевода. (Таким образом, он действует так же, как если бы он был объявлен в глобальном масштабе). Это похоже на объявления локальных функций:
int main()
{
void exit(int); // equivalent to non-local declaration
}
Обратите внимание, что в примере 2.
переменная i
уже была объявлена static
, и поэтому она не получит внешнюю привязку. Однако я мог бы быть объявлен в другой единицы перевода без конфликтов компоновщиков.