В самом худшем случае тебе в случае C ←→ C++ требуется экстерн, а в случае C ←→ Rust требуется extern, конвертация типов и, желательно, safe-обёртка.
Я бы это аргументировал примерно так:
Базовый вариант подключения C к Rust можно сделать довольно дёшево с помощью биндгена по хидерам, но у тебя везде будет ансейф. В C++ обычно можно использовать сами хидеры вместо биндгена по ним, что несколько уменьшает кост, но тебе всё равно придётся делать «сейф»-обёртку, если ты хочешь работать с красивыми умными указателями и RAII-типами плюсов. Если же ты в плюсах используешь функции из C как они были, то ты можешь то же самое делать в Rust, просто расставляя unsafe на местах вызова.
И в плюсах ты конечно не будешь писать идеоматичную обертку над сишным кодом?