Вопрос по c, undefined-reference, c++, include – Код C, скомпилированный с C ++: неопределенная ссылка

7

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

#ifdef __cplusplus
  extern "C" {
#endif

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

#ifdef __cplusplus
  }
#endif

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

да, это определяется компиляторами C ++ (или, по крайней мере, теми, которые я использую) Suugaku
Первая мысль: определен ли __cplusplus? Default
возможный дубликатВопрос новичка: когда использовать extern "C" {// code}? Paul R

Ваш Ответ

2   ответа
2

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

7

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

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

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

Похожие вопросы