Код C, скомпилированный с C ++: неопределенная ссылка
=====================================================

У меня есть небольшая программа, которую я могу без проблем скомпилировать с GCC и ICC, но я также хотел бы, чтобы код работал с G ++ и ICPC. Я пытался добавить это:

в начале и это:

в конце всех заголовочных файлов, но я все еще получаю несколько «неопределенных ссылок на« ... »ошибки.

Я думаю, что вы ошибаетесь ... Внешний C предназначен для отключения функции искажения; так что если вы делаете это только для заголовочных файлов, когда вы пытаетесь связать свой искаженный объектный код, объявленные имена функций не будут совпадать с именами функций в объектном файле.

В любом случае, внешний C не добавит переносимости, если все приложение компилируется и связывается с одним и тем же компилятором C ++, оно предназначено для смешивания библиотек C с кодом C ++.

Если ваш код находится в общем подмножестве C и C ++, вы уже должны быть в состоянии скомпилировать его любым компилятором, но я не вижу причины для этого (кроме работы по принципу наименьшего удивления, поскольку C ++ более строг с некоторые вещи).



Вы получаете неопределенные ссылки, потому что объявление и определение не совпадают, если вы положите`extern "C"`, что предотвращает искажение имени: но в этом случае это происходит только в ваших заголовочных файлах.