c++ - 大多数 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 }
解决方案
推荐阅读
- python - Adafruit MM8451 & Raspberry PI SPI 错误 121 与 Buster
- amazon-cloudformation - AWS CloudFormation 堆栈升级失败并显示“无法满足 100% MinSuccessfulInstancesPercent 要求”
- flutter - Flutter 文档选择器
- sql - Oracle:使用 where 子句选择重复项?
- excel - 如何使“@”符号在 VBA 宏内的公式中起作用?
- vue.js - 在使用 v-for 的 VueJS 中,这种结构可能吗?
- php - MeDoo - WHERE 部分中的条件 LIKE
- java - 应用程序在尝试添加标记时抛出异常“不在主线程中”
- python - 我如何使用烧瓶进行重定向?
- javascript - 如何将状态推送到包含特定项目的数组?