I am new in the field of Linux system programming.I currently program in C and want to switch to c++.
Can we use all the functions defined in POSIX C libraries in c++ without any change ?
In principle you should be able to use any C API from C++; the language includes features to facilitate it, and most C library authors are aware that people want to do this and will take the appropriate steps. For the system programming interfaces specified by POSIX, C++ compatibility is an explicit design goal.
However, you may still encounter problems. In my experience, the most common problems are:
using namespace std
(but you weren't doing that, right?)std::
won't save you there.-std=c++11 -D_XOPEN_SOURCE=700
) may expose bugs in system headers. This is more likely to happen with C++ than C.setjmp
and longjmp
are obviously a concern here (has anyone done a C library that implements those on top of DWARF-style exception handling?) but so are fork
, setcontext
and friends, pthread_cancel
, pthread_cleanup_push
, and probably a few others I can't remember off the top of my head. (I recall a giant, ultimately inconclusive argument between Ulrich Drepper and the GCC C++ guys back in 2004 or so about exactly how pthread_cancel
should behave in the presence of destructors.)If you go beyond POSIX, you may also have problems with:
extern "C"
block when compiled as C++, which means all the function names get mangled when they shouldn't have been, and the link fails.int template;
)void *
is assignment compatible with other pointer types (e.g. that it is not necessary to cast the result of malloc
)struct foo;
does not define a typedef-name foo
Note that the headers specified by POSIX frequently contain system-specific extensions that have not been as carefully thought out as the POSIX interfaces themselves.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With