Вопрос

В С:Почему только встроенные функции с внутренней связью (т. е. объявленные со статическим значением) могут ссылаться (т. е. копировать адрес, читать, писать или вызывать) на переменную или функцию в области файла со статической продолжительностью хранения, а другие встроенные функции — нет?

Это было полезно?

Решение

Вот как все определяется.

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

Если встроенная функция только используется в этом модуле (внутренняя связь).Тогда можно безопасно предоставить ему доступ к «частным» материалам этого модуля.

Другие советы

Объект или функция с помощью приспособления файла, объявленные с помощью спецификатора хранения «Статическим», имеет внутреннюю связь. Хотя его жизнь - это все выполнение программы, объект с внутренней связью не объявляется (т. Е. Видимым из) других единиц перевода.

Для встроенной функции с внешним соединением компилятор может:

  • позвонить пример в рамках трансляции, в которой функция объявлена
  • выполнить встроенное замещение в точке вызова
  • создать идентичный, но отдельный пример функции в пределах вызова переводчика

В последних двух случаях объекты с внутренней связью не будут видны. Поэтому встроенная функция с внешним соединением не может ссылаться на идентификатор с внутренней связью.

Кроме того, он «не должен содержать определение модифицируемого объекта со статической продолжительностью хранения», поскольку это может привести к нескольким экземплярам этого объекта, который, вероятно, не является предполагаемым поведением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top