Меня интересует использование ключевого слова static
в качестве ограничения области действия для переменных в файле в C.
Стандартный способ создания программы на C, как я ее вижу, заключается в следующем:
- есть куча файлов c, определяющих функции и переменные, возможно, область действия ограничена
static
. - иметь кучу файлов h, объявляющих функции и, возможно, переменные соответствующего файла c, для использования другими файлами c. Частные функции и переменные не публикуются в файле h.
- каждый файл c компилируется отдельно в файл o.
- все файлы связаны вместе с файлом приложения.
Я вижу две причины для объявления гобала как static
, если переменная все равно не опубликована в файле h:
- один для удобства чтения. Сообщите будущим читателям, включая меня, что к переменной нет доступа ни в одном другом файле.
- во-вторых, предотвратить повторное объявление переменной как
extern
другим файлом c. Я предполагаю, что компоновщику не понравится, если переменная будет одновременноextern
иstatic
. (Мне не нравится идея файла, переопределяющего переменную, принадлежащую кому-то другому, какextern
, это нормальная практика?)
Любая другая причина?
То же самое касается static
функций. Если прототип не опубликован в файле h, другие файлы все равно могут не использовать эту функцию, так зачем вообще определять ее static
? Я вижу те же две причины, но не более.
static
не ограничивает область действия, а дает внутреннюю связь. Аналогично, если рассматривать единицу перевода как область действия, а не как правильный термин. - person Gauthier   schedule 03.03.2016