Скрытие структурных переменных от внешних связей - PullRequest
1 голос
/ 30 апреля 2010

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

Ответы [ 3 ]

4 голосов
/ 01 мая 2010

Используйте непрозрачный тип данных, где тип объявлен в заголовке, но структура определена в реализации. Это означает, что любой код, который включает заголовок, может передавать указатели на тип, но только реализация может изменять и обрабатывать данные, содержащиеся в структуре.

Типичный пример: FILE из stdio.h.

Для получения дополнительной информации см. http://en.wikipedia.org/wiki/Opaque_pointer

1 голос
/ 01 мая 2010

С помощью статической клавиатуры вы обычно делаете приватную функцию. Если вы используете его для переменной, как глобальной, так и локальной по отношению к функции, вы получите не реентерабельный код.

Я настоятельно рекомендую вам избегать этого, потому что это создает проблемы в многопоточной среде. Также вас может не интересовать многопоточное программирование, но вы не знаете, что вам понадобится в будущем!

По вашему конкретному вопросу я полностью согласен с советами Джеймса Морриса по поводу непрозрачного указателя.

1 голос
/ 01 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...