Можно ли использовать функции из стандартной библиотеки C в C ++?

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

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

30

Решение

Да, C ++ изначально разрабатывался так, чтобы любая библиотека C могла легко использоваться в C ++. Конечно, это немного менее верно (в частности, если библиотека C использует ключевое слово C ++, например, try или же dynamic_castэто не сработает; также, если Перезвоните закодированный в C ++, переданный в библиотеку C, вызывает некоторое исключение, у вас, вероятно, будет большой беспорядок).

Стандартная практика использовать заголовочный файл C в C ++:

 extern "C" {
#include <some_c_header_file.h>
};

и большинство существующий Заголовочные файлы C предназначены для взаимодействия с C ++, на самом деле содержат такие вещи, как

 #ifdef __cplusplus
extern "C" {
#endif

//// most of the header material goes here, C style

#ifdef __cplusplus
}; // end extern "C"#endif

На практике многие стандартные заголовки C имеют эквивалентные заголовки C ++, заключающие в себе вещи, как указано выше (а также в namespace std). Например, C <stdio.h> это C ++ <cstdio> -Но вы часто предпочитаете подлинные потоки C ++ (<iostream>), тем не мение printf-подобные процедуры обычно более локализация дружелюбный с Gettext (3).

тем не мение C и C ++ очень разные языки. Вы должны кодировать на идиоматическом C ++ 11 (используя стандартный C ++ контейнеры, auto, укупорочные, RAII, умные указатели, правило пяти, SFINAE, исключения, анонимные функции, …)

Некоторые стандартные функции C не очень полезны в идиоматическом C ++. Например, вы вряд ли будете использовать непосредственно malloc в подлинный C ++ (хотя бы предпочитаю new — который все еще находится на очень низком уровне и не более в духе C ++, более вероятно, что он будет использовать контейнеры и умные указатели без работа с распределением кучи вручную). Но POSIX функции (особенно Системные вызовы (2) ….) весьма полезны в C ++. longjmp вероятно, будет несовместимо с исключениями C ++.

Кстати, C ++ развился много в этом веке. Не учите C ++ 98, но по крайней мере C ++ 11 (имеются огромный различия между ними) и, возможно, C ++ 14. Использовать недавний компилятор (НКУ или же Clang / LLVM); в декабре 2015 года это означает GCC 5 по крайней мере или Clang / LLVM 3.7 по крайней мере. Не забудьте включить все предупреждения & отладочная информация в компиляторе (например, g++ -Wall -Wextra -g -std=c++11)

C ++ (это означает C ++ 11 как минимум) это сложно язык программирования, значительно сложнее, чем C. Вам понадобятся недели чтения, чтобы изучить некоторые из них, и хороший стиль кодирования и дисциплина очень важны (вы можете легко написать очень дрянной код на C ++). Начать с Программирование: принципы & Практика использования C ++

Я считаю, что если вы знаете только C, читая SICP (и изучая немного Схемы) до изучение C ++ имеет смысл.

Понятие неопределенное поведение это очень важно, как в C, так и, возможно, даже больше в C ++. Вам абсолютно необходимо это понять (см. блог об этом) а также избежать Это.

Вы также многому научитесь, изучая (и, возможно, внося свой вклад) в некоторые существующие бесплатно программное обеспечение и его исходный код. Поэтому я рекомендую использовать Linux.

48

Другие решения

Я просто процитирую параграф из стандарта ISO / IEC N3690 (стандарт c ++).

17.2 Стандартная библиотека C

1 Стандартная библиотека C ++ также предоставляет средства стандартной библиотеки C, соответствующим образом отрегулированные для обеспечения безопасности статических типов.

Так просто да!

20

да. Вы можете использовать стандартные функции библиотеки C в C ++
Примеры

    stdio.h   => cstdio   (printf/scanf)
math.h    => cmath     (sqrt)
0
По вопросам рекламы [email protected]