Как использовать C-код в С++
Небольшой вопрос:
Может ли С++ использовать файлы заголовков C в программе?
Это может быть странный вопрос, в основном мне нужно использовать исходный код из другой программы (сделанный на языке C) на С++. Есть ли разница между обоими файлами заголовков вообще? Может быть, если я изменю некоторые библиотеки...
Надеюсь, ты поможешь мне.
Ответы
Ответ 1
Да, вы можете включить заголовки C в код С++. Нормально добавить это:
#ifdef __cplusplus
extern "C"
{
#endif
// C header here
#ifdef __cplusplus
}
#endif
чтобы компилятор С++ знал, что объявления функций и т.д. должны рассматриваться как C, а не С++.
Ответ 2
Если вы компилируете код C вместе, как часть вашего проекта, с кодом C++, вам просто нужно будет включать файлы заголовков в обычном режиме и использовать режим компилятора C++ для компиляции кода, некоторые C-коды не будут компилироваться "чистым" с помощью компилятора C++ (например, использование malloc
потребует кастинга).
Если, с другой стороны, у вас есть библиотека или какой-либо другой код, который не является частью вашего проекта, тогда вам нужно убедиться, что заголовки отмечены как extern "C"
, в противном случае C++ соглашение об именах для скомпилированного будут применяться имена функций, которые не будут соответствовать соглашению об именах, используемому компилятором C.
Здесь есть два варианта: вы сами редактируете сам файл заголовка, добавляете
#ifdef __cplusplus
extern "C" {
#endif
... original content of headerfile goes here.
#ifdef __cplusplus
}
#endif
Или, если у вас нет возможности редактировать эти заголовки, вы можете использовать эту форму:
#ifdef __cplusplus
extern "C" {
#endif
#include <c_header.h>
#ifdef __cplusplus
}
#endif
Ответ 3
Да, но вам нужно сообщить компилятору С++, что объявления из заголовка C:
extern "C" {
#include "c-header.h"
}
В большинстве заголовков C они уже включены, завернуты в #if defined __cplusplus
. Это, возможно, немного странно (синтаксис С++ в заголовке C), но это часто делается для удобства.