Вопрос по c, undefined-reference, c++, include – Код C, скомпилированный с C ++: неопределенная ссылка
У меня есть небольшая программа, которую я могу без проблем скомпилировать с GCC и ICC, но я также хотел бы, чтобы код работал с G ++ и ICPC. Я пытался добавить это:
#ifdef __cplusplus
extern "C" {
#endif
в начале и это:
#ifdef __cplusplus
}
#endif
в конце всех заголовочных файлов, но я все еще получаю несколько «неопределенных ссылок на« ... »ошибки.
Я думаю, что вы ошибаетесь ... Внешний C предназначен для отключения функции искажения; так что если вы делаете это только для заголовочных файлов, когда вы пытаетесь связать свой искаженный объектный код, объявленные имена функций не будут совпадать с именами функций в объектном файле.
В любом случае, внешний C не добавит переносимости, если все приложение компилируется и связывается с одним и тем же компилятором C ++, оно предназначено для смешивания библиотек C с кодом C ++.
Если ваш код находится в общем подмножестве C и C ++, вы уже должны быть в состоянии скомпилировать его любым компилятором, но я не вижу причины для этого (кроме работы по принципу наименьшего удивления, поскольку C ++ более строг с некоторые вещи).