首页 > 解决方案 > 大多数 linux 系统头文件 C++ 是否兼容?

问题描述

大多数 linux 系统头文件/API C++ 是否兼容?

今天我试图做这样的事情:

#include <iostream>

extern "C" {
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
}


int main() {
  //socket exercise
}

然后有朋友告诉我:

在大多数情况下,甚至不需要这样做(额外的 extern "C" {}),因为它们是系统头文件。
先试一试,然后再担心。
不要假设系统标头不兼容。
你实际上可以破坏这样做,因为有些只有 C++ 导出

然后我问:

如果我包含一个 C 库函数并且编译没有错误。它是否确保我包含的库与 C++ 兼容,然后我可以安全地使用它?

答案是:

不,没有检查。


所以先试试 --> 没有错误 --> 不能确保它与 C++ 兼容。

那么我应该如何处理 Linux 系统头文件?因为我不能简单地用额外的extern "C" {}语句包装系统头文件(“我实际上可能会破坏这样做,因为有些只有 C++ 导出”)。

所以我需要检查我使用的每个头文件的系统头文件中是否定义了MARCOS __BEGIN_DECLS__END_DECLS如果没有,那么我需要用extern "C" {}? 否则我只是直接包含它?

仅供参考,__BEGIN_DECLS定义__END_DECLS为:

# define __BEGIN_DECLS  extern "C" {
# define __END_DECLS    }

标签: c++clinux

解决方案


推荐阅读