Предположим, у меня есть программа на C++, и я хочу вызывать в ней функции из объектного файла C. Ограничение состоит в том, что мне не разрешено вносить какие-либо изменения в исходные файлы C.
В этом случае я бы включил заголовок C как extern "C " в моем файле C++ вызовите функцию, скомпилируйте объект C с помощью gcc -c и передайте результат в g++ вместе с фактическими исходными кодами C++.
Думаю, я бы также поместил C-заголовок #include внутри именованного блока namespace в файле C++, чтобы сохранить чистоту локального пространства имен (кто знает, какие еще интересные вещи есть в файле .h).
Что теперь, если мне нужно вызвать функции из двух объектных файлов C? Допустим, у них разные подписи. Но в объектных файлах также есть дублирующиеся функции. Не взорвется ли мой компоновщик на этом этапе, если я попытаюсь передать оба объекта в g++ одновременно? То же самое и с глобальными переменными.
Еще раз: мне не разрешено изменять ЛЮБОЙ исходный код C. В противном случае я бы просто переименовал файлы .c в .cxx, обернул их содержимое и содержимое соответствующих заголовков внутри namespace bla { и передал все в g++.
(Да, C не является подмножеством C++, как уже упоминалось в одном из комментариев)
Подробнее здесь: https://stackoverflow.com/questions/343 ... nt-signatu