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