Shi*_*ava 4 c++ linux posix linux-device-driver linux-kernel
我是Linux系统编程领域的新手.我目前在C语言中编程并希望切换到c ++.
我们可以在c ++中使用POSIX C库中定义的所有函数而不做任何更改吗?
原则上,您应该能够使用C++中的任何C API; 该语言包含促进它的功能,大多数C库作者都知道人们想要这样做并将采取适当的步骤.对于POSIX指定的系统编程接口,C++兼容性是一个明确的设计目标.
但是,您可能仍会遇到问题.根据我的经验,最常见的问题是:
using namespace std
(但你没有这样做,那么会给你带来麻烦吗?)std::
不会救你的.-std=c++11 -D_XOPEN_SOURCE=700
)编译程序可能会暴露系统头中的错误.使用C++比C更容易发生这种情况.setjmp
而longjmp
显然这里关注(有没有人做过实现那些C库之上矮人风格的异常处理?),但这样的fork
,setcontext
和朋友pthread_cancel
,pthread_cleanup_push
和可能其他一些我不记得了顶我的头.(我记得在2004年左右,Ulrich Drepper和GCC C++家伙之间存在一个巨大的,最终没有结论的论点,关于pthread_cancel
在析构函数存在的情况下究竟应该如何表现.)如果超出POSIX,您可能还会遇到以下问题:
extern "C"
当编译为C++时,没有麻烦将所有声明包装在一个块中的标题,这意味着所有函数名称在它们不应该被破坏时会被破坏,并且链接失败.int template;
)void *
赋值与其他指针类型兼容(例如,不需要转换结果malloc
)struct foo;
它没有定义的typedef名foo
请注意,POSIX指定的标头经常包含系统特定的扩展,这些扩展没有像POSIX接口本身那样仔细考虑过.
归档时间: |
|
查看次数: |
1378 次 |
最近记录: |