Интересно, можно ли было бы эффективно использовать оптимизацию во время соединения (lto) для программ, состоящих из TU с кодом C ++, вызывающего некоторую функцию в TU с кодом C. Итак, есть ли способ получить функцию C встраиваемый в результирующую программу?
Реальным вариантом использования является микропрограммное обеспечение микроконтроллера, написанное на C ++. Но есть фрагменты кода, которые должны быть написаны на C из-за семантики C (например, доступ к неактивному члену объединения).
(Это не имеет ничего общего с функциями ручной маркировки как встроенных)
Это не должно быть проблемой вообще. И в GCC, и в Clang оптимизация времени соединения работает на промежуточном представлении кода. То есть с помощью -flto
вы создаете объектные файлы с дополнительной информацией LTO (gcc) или байт-кодом LLVM (Clang), после чего исходный язык перестает иметь значение.
Некоторые зашли так далеко, что смешали еще меньше связанных C ++ и D, но все еще используют LTO: http://johanengelen.github.io/ldc/2016/11/10/Link-Time-Optimization-LDC.html
Других решений пока нет …