我在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库,实现了 DWARF风格的异常处理?),但fork
, setcontext
和朋友, pthread_cancel
, pthread_cleanup_push
,也可能是其他一些我不能记得我的头顶。 (我记得在2004年左右,Ulrich Drepper和GCC C ++人之间的一个巨大的,最终没有定论的论点,就是pthread_cancel
应该如何在析构函数中表现出来)。 如果你超越POSIX,你可能也有问题:
extern "C"
块中,这意味着所有的函数名称在它们本来不应该被破坏的地方被破坏,并且链接失败。 int template;
) void *
赋值与其他指针类型兼容(例如,不需要使用malloc
的结果) struct foo;
没有定义typedef-name foo
请注意,由POSIX指定的头文件通常包含特定于系统的扩展,这些扩展与POSIX接口本身一样没有仔细考虑过。
“我们可以在c ++中使用所有在POSIX C库中定义的函数吗?”
当然可以。 任何C风格的API都可以在c ++中无缝地使用。