Entiendo que inlineen sí mismo es una sugerencia para el compilador y, a su discreción, puede o no incluir la función en línea, y también producirá un código de objeto enlazable.
Creo que static inlinehace lo mismo (puede o no estar en línea) pero no producirá un código de objeto vinculable cuando esté en línea (ya que ningún otro módulo podría vincularlo).
¿Dónde extern inlineencaja en la imagen?
Suponga que quiero reemplazar una macro de preprocesador por una función en línea y requiero que esta función se inserte (por ejemplo, porque usa las macros __FILE__y __LINE__que deberían resolverse para la persona que llama pero no esta función llamada). Es decir, quiero ver un error del compilador o del enlazador en caso de que la función no se inserte. ¿Hace extern inlineesto? (Supongo que, si no es así, no hay forma de lograr este comportamiento más que seguir con una macro).
¿Existen diferencias entre C ++ y C?
¿Existen diferencias entre los diferentes proveedores y versiones de compiladores?