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