Eu entendo que inlinepor 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 inlinefaz 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 inlineencaixa 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 inlineisso? (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?