Совсем новый вопрос, как есть.
Верно ли, что все c-библиотеки могут использоваться в С++?
Ответ 1
Да. Нет причин, по которым вы не можете использовать библиотеки C на С++. Вещи меняются, если вы хотите скомпилировать C в компиляторе С++. C ABI полностью поддерживается с С++, однако все это не обязательно так удобно с точки зрения API. Некоторые C-добавления, такие как restrict
, не соответствуют стандарту С++ и должны быть рассмотрены с осторожностью.
Ответ 2
Если заголовки правильно защищены с помощью extern "C" { ... }
, тогда да.
Ответ 3
Ответ: да. Взгляните на это:
Ответ 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, которая вызывает эти функции, а затем использовать эту библиотеку обложек в вашем коде на С++.
Тем не менее, я думаю, что наткнуться на что-то подобное в "реальном мире" довольно редко.