В чем разница между статической встроенной, внешней встроенной и обычной встроенной функцией?

Какая разница между static inline , extern inline и нормальный inline функционировать?

Я видел некоторые смутные объяснения по этому поводу. Насколько я понял, static inline это не просто inline функция, которая предназначена для упоминания только в определенном файле как static Ключевое слово обычно означает. То же самое касается extern inline тоже, я думаю, это не то же самое объяснение, что и с extern переменные. Любые ответы будут с благодарностью!

1 ответ

Решение

Определение функции с static inline определяет встроенную функцию с внутренней связью. Такая функция работает "как ожидалось" из "обычных" свойств этих классификаторов: static дает ему внутреннюю связь и inline делает это встроенным. Таким образом, эта функция является "локальной" для единицы перевода и встроенной в нее.

Определение функции просто inline определяет встроенную функцию с внешней связью. Однако такое определение упоминается как встроенное определение, и оно не работает как внешнее определение для этой функции. Это означает, что даже если эта функция имеет внешнюю связь, она будет рассматриваться как неопределенная от других единиц перевода, если только вы не предоставите для нее отдельное внешнее определение.

Определение функции с extern inline определяет встроенную функцию с внешней связью, и в то же время это определение служит внешним определением для этой функции. Такую функцию можно вызвать из других модулей перевода.

Последние два абзаца означают, что у вас есть выбор: extern inline определение встроенной функции с внешней связью или предоставление двух отдельных определений для нее: одно inline и другие extern, В последнем случае, когда вы вызываете функцию, компилятору разрешается выбрать одно из двух определений.

Другие вопросы по тегам