Да. Нет никаких причин, по которым вы не можете использовать библиотеки C в C++. Все изменится, если вы захотите скомпилировать C в компилятор C++. C ABI полностью поддерживается C++, однако с точки зрения API все не так просто. Некоторые дополнения C, такие как restrict
, не входят в стандарт C++, и с ними следует обращаться осторожно.
Если заголовки должным образом защищены с помощью extern "C" { ... }
, тогда да.
И да, и нет.
Под вопросом…
Составные литералы
Собственные типы данных комплексных чисел
Ключевое слово «restrict»
Вариадные макросы
Тип данных «long long int»
Некоторые из этих функций из C включены в C++0x, а некоторые доступны в виде расширений библиотек во многих новых компиляторах для «обычного» C++.
Так что это зависит от того, о каком уровне C вы говорите, о каком уровне стандарта C++ и какой платформе какого компилятора, поскольку реализации компилятора всегда имеют различную поддержку стандартов и, конечно, ошибок.
Кроме того, есть ключевые слова, используемые в C++, которые не были определены в C и, следовательно, доступны для использования в качестве имен переменных в C, но вызывают ошибку компилятора C++. В C совершенно законно использовать следующие слова в качестве имен переменных или функций, но они, очевидно, заставят C++ бросить шипение...
О, и "goto" ведет себя по-разному в C++ и C. В C++ "goto" нельзя использовать для перехода через инициализацию переменной, но это нормально для C. То же самое касается операторов switch. В C вы можете написать оператор switch или набор операторов goto, которые не будут компилироваться в C++.
Что еще? «strchr» работает по-разному в C и C++. В C он возвращает указатель на char. В C++ он возвращает указатель const char. Если вы используете этот вывод из strchr определенным образом в C, он может разбить куски в C++ из-за корректности const C++.
Встроенные функции обрабатываются по-разному. В C они привязаны к файлу, но в C++ по умолчанию имеют внешнюю связь.
Код C++ нуждается в прототипах функций, определенных с помощью extern "C" для вызова функции C.
C++ искажает символы имен функций, а C — нет.
"В теории нет разницы между теорией и практикой. На практике есть. " - Йоги Берра