Встроенные функции с внутренней связью?
-
25-09-2019 - |
Вопрос
В С:Почему только встроенные функции с внутренней связью (т. е. объявленные со статическим значением) могут ссылаться (т. е. копировать адрес, читать, писать или вызывать) на переменную или функцию в области файла со статической продолжительностью хранения, а другие встроенные функции — нет?
Решение
Вот как все определяется.
Встроенная функция будет вставлена в модуль, где она вызывается.Таким образом, он не может получить доступ к личным данным в своем модуле, где он определен.
Если встроенная функция только используется в этом модуле (внутренняя связь).Тогда можно безопасно предоставить ему доступ к «частным» материалам этого модуля.
Другие советы
Объект или функция с помощью приспособления файла, объявленные с помощью спецификатора хранения «Статическим», имеет внутреннюю связь. Хотя его жизнь - это все выполнение программы, объект с внутренней связью не объявляется (т. Е. Видимым из) других единиц перевода.
Для встроенной функции с внешним соединением компилятор может:
- позвонить пример в рамках трансляции, в которой функция объявлена
- выполнить встроенное замещение в точке вызова
- создать идентичный, но отдельный пример функции в пределах вызова переводчика
В последних двух случаях объекты с внутренней связью не будут видны. Поэтому встроенная функция с внешним соединением не может ссылаться на идентификатор с внутренней связью.
Кроме того, он «не должен содержать определение модифицируемого объекта со статической продолжительностью хранения», поскольку это может привести к нескольким экземплярам этого объекта, который, вероятно, не является предполагаемым поведением.