Встроенные определения

pg474, K.N.King

«Общее правило в C99 состоит в том, что если все объявления функций верхнего уровня в определенном файле включают в себя inline, но не extern, то определение функции в этом файле является встроенным».

Что такое: «объявление функции верхнего уровня» ??

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

Что он здесь говорит ??

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

Но я думал, что вы не можете вызвать функцию с внешней связью! Компилятор выдаст ошибку:

стр. 473

«поэтому попытка вызвать среднее из другого файла будет считаться ошибкой»

«Следовательно, C99 налагает следующие ограничения на встроенную функцию с внешней связью (но не на одну с внутренней связью): функция может не определять модифицируемую статическую переменную. Функция не может содержать ссылки на переменные с внутренней связью».

Почему?? Если функциявстроенный и внешнийтогда даже если он объявит статическое int i; поскольку функция не может быть связана с ней, вы не можете вызвать ее, но разве не будет создана статическая переменная вне стекового фрейма встроенных функций - так что вы сможете ссылаться на нее? Есть ли у встроенных функций стековый фрейм? Что тут происходит??

Ответы на вопрос(1)

Ваш ответ на вопрос