Почему ключевое слово static имеет так много значений в C и C ++? [дубликат]

На этот вопрос уже есть ответ:

Как мы знаем, ключевое слово static имеет несколько значений в C. В C99 добавлена ​​возможность легального написания

void foo (int arr[static 50])
{
    // ...
}

, что добавляет путаницы, и В C ++ есть статические переменные-члены и функции.

Это было бы не так сложно, если бы все использования могли быть каким-то образом связаны, но мне трудно найти эту ссылку для некоторых случаев. В частности, почему ключевое слово static должно использоваться для изменения видимости (связывания) или что, черт возьми, оно связано с минимальным количеством элементов массива.

Так есть ли историческая причина злоупотребления ключевым словом static или есть секретная ссылка под капотом, которая связывает все его использования?

28
задан Community 23 May 2017 в 11:46
поделиться