Eu entendo que inline
por si só é uma sugestão para o compilador e, a seu critério, ele pode ou não embutir a função e também produzir código de objeto vinculável.
Acho que static inline
faz o mesmo (pode ou não embutir), mas não produzirá código de objeto vinculável quando embutido (já que nenhum outro módulo pode ser vinculado a ele).
Onde se extern inline
encaixa na imagem?
Suponha que eu queira substituir uma macro de pré-processador por uma função embutida e exigir que essa função seja embutida (por exemplo, porque ela usa as macros __FILE__
e __LINE__
que devem ser resolvidas para o chamador, mas não para esta função chamada). Ou seja, desejo ver um erro do compilador ou do vinculador no caso de a função não ficar embutida. Faz extern inline
isso? (Presumo que, se não, não há outra maneira de atingir esse comportamento além de manter uma macro.)
Existem diferenças entre C ++ e C?
Existem diferenças entre os diferentes fornecedores e versões de compiladores?