Я понимаю, что "встроенный" сам по себе является предложением для компилятора, и по своему описанию он может или не может встроить функцию, а также будет создавать связываемый объектный код.
Я думаю, что "статический inline" делает то же самое (может или не является встроенным), но не будет создавать ссылочный объектный код при вставке (так как ни один другой модуль не может ссылаться на него).
Где "extern inline" вписывается в изображение?
Предположим, что я хочу заменить макрос препроцессора встроенной функцией и потребовать, чтобы эта функция была встроена (например, потому что она использует макросы __FILE__ и __LINE__, которые должны быть разрешены для вызывающего, но не эта вызываемая функция). То есть, я хочу увидеть ошибку компилятора или компоновщика в случае, если функция не будет вставлена. Выполняет ли это "extern inline"? (Я предполагаю, что, если это не так, невозможно достичь такого поведения, кроме как придерживаться макроса.)
Существуют ли различия между С++ и C?
Существуют ли различия между разными поставщиками компилятора и версиями?