Я новичок в области системного программирования Linux. В настоящее время я программирую на C и хочу перейти на c ++.
Можем ли мы использовать все функции, определенные в библиотеках POSIX C в c ++, без каких-либо изменений?
В принципе у вас должна быть возможность использовать любой C API из C ++; язык включает в себя функции, облегчающие его, и большинство авторов библиотеки C знают, что люди хотят сделать это, и предпримут соответствующие шаги. Для интерфейсов системного программирования, указанных в POSIX, совместимость с C ++ является явной целью проектирования.
Тем не менее, вы все равно можете столкнуться с проблемами. По моему опыту, наиболее распространенными проблемами являются:
using namespace std
(но ты этим не занимался, верно?)std::
не спасу тебя там.-std=c++11 -D_XOPEN_SOURCE=700
) может выявить ошибки в системных заголовках. Скорее всего, это случится с C ++, чем с C.setjmp
а также longjmp
очевидно, проблема здесь (кто-нибудь сделал библиотеку C, которая реализует те на вершине Обработка исключений в стиле DWARF?) fork
, setcontext
и друзья, pthread_cancel
, pthread_cleanup_push
и, возможно, несколько других, которые я не могу вспомнить с головы до головы. (Я помню гигантский, в конечном счете, неубедительный спор между Ульрихом Дреппером и ребятами из GCC C ++ в 2004 году или около того о том, как именно pthread_cancel
должен вести себя в присутствии деструкторов.)Если вы выходите за рамки POSIX, у вас могут возникнуть проблемы с:
extern "C"
блок при компиляции как C ++, что означает, что все имена функций искажаются, когда их не должно было быть, и ссылка завершается ошибкой.int template;
)void *
совместимо ли присвоение с другими типами указателей (например, что нет необходимости приводить результат malloc
)struct foo;
делает не определить typedef-имя foo
Обратите внимание, что заголовки спецификация POSIX часто содержит системные расширения, которые не были так тщательно продуманы, как сами интерфейсы POSIX.
«Можем ли мы использовать все функции, определенные в библиотеках POSIX C в c ++, без каких-либо изменений?»
Конечно вы можете. Любой API в стиле c можно без проблем использовать в c ++.