Верно ли, что все c-библиотеки могут использоваться в С++?

Совсем новый вопрос, как есть.

Ответ 1

Да. Нет причин, по которым вы не можете использовать библиотеки C на С++. Вещи меняются, если вы хотите скомпилировать C в компиляторе С++. C ABI полностью поддерживается с С++, однако все это не обязательно так удобно с точки зрения API. Некоторые C-добавления, такие как restrict, не соответствуют стандарту С++ и должны быть рассмотрены с осторожностью.

Ответ 2

Если заголовки правильно защищены с помощью extern "C" { ... }, тогда да.

Ответ 4

Да и нет.

Вопросы...

  • Компонентные литералы

  • Типы комплексных комплексных чисел

  • "ограничить" ключевое слово

  • Макросы Variadic

  • "long long int" datatype

Некоторые из этих функций из C включены в С++ 0x, а некоторые доступны как расширения библиотек во многих новых компиляторах для "нормального" С++.

Таким образом, это зависит от того, на каком уровне C вы говорите, на каком уровне С++-стандарт и на какой платформе какой компилятор с момента реализации компилятора всегда отличался поддержкой стандартов и ошибок, конечно.

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

  • шаблон
  • новый
  • класса

О и "goto" ведет себя по-другому в С++ и C. В С++ "goto" не может использоваться для перехода через инициализацию переменной, но это нормально для C. То же самое касается операторов switch. В C вы можете написать оператор switch или набор goto, который не будет компилироваться в С++.

Что еще? "strchr" работает по-разному в C vs С++. В C он возвращает указатель char. В С++ он возвращает указатель const char. Если вы используете этот вывод из strchr определенным образом в C, он может выпустить куски в С++ из-за корректности С++ const.

Встроенные функции обрабатываются по-разному. В C они привязаны к файлу, но по умолчанию в С++ они имеют внешнюю связь.

Для кода С++ нужны прототипы функций, определенные с помощью extern "C" для вызова функции C.

С++ управляет символами имен функций, но C не делает.

"В теории нет разницы между теорией и практикой. На практике существует". - Йоги Берра

Ответ 5

Я думаю, что мой надуманный пример покажет вам, почему это не всегда возможно:

#ifndef HEADER_H
#define HEADER_H
int class(int a, int b);
int private(int a);
#endif

Совершенно допустимый C, но он не будет компилироваться в С++, даже с внешним блоком "C". Насколько я знаю, единственный способ использовать библиотеку C - это создать другую библиотеку C, которая вызывает эти функции, а затем использовать эту библиотеку обложек в вашем коде на С++.

Тем не менее, я думаю, что наткнуться на что-то подобное в "реальном мире" довольно редко.