c++ - C++ 程序中的 C 头文件

标签 c++ c header

<分区>

我知道 C 头文件可以在 C++ 程序中使用,方法是在它们前面加上“c”。 但是,我不明白为什么有人会这样做。是否存在 C 头文件更适合 C++ 程序的情况?

最佳答案

您通常不需要特别命名标题。你可以这样做

extern "C" {
#include "your-c-header.h"
}; // end extern C

或者甚至输入 your-header.h

#ifdef __cplusplus
extern "C" {
#endif
/// the real content of your header goes here
#ifndef __cplusplus
}; // end extern C
#endif

当然你也会添加通常的include guard .

C++ 语言最初设计为与 C 兼容(即使在今天,C++11“大部分”——但不是正式地——与“大部分”C99 或 C11 兼容)。所以这个技巧通常是有效的。但是应该知道 C 和 C++ 之间不兼容的极端情况(这取决于 C 和 C++ 的特定版本,甚至可能取决于您的特定实现和操作系统)。

顺便说一句,C++ 标准确实定义了一些 header 名称,例如 <cstdio>但仅用于包装标准 C header (如 <stdio.h> )。对于其他 header (例如 POSIX header ,或者您喜欢的库中的 header ),这并不系统地适用。

至于为什么在 C++ 代码中包含有用的 C header :您如何使用例如标准 C API(如 POSIX)而不这样做,或者使用一些可用的 API 和库(例如来自 GNU 的 <readline/readline.h><gdbm.h><ncurses.h>)?

关于c++ - C++ 程序中的 C 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26529870/

相关文章:

c++ - `if constexpr (false)` 始终计算为真

c++ - 为什么 cudaMemcpy 花费这么多时间?

c++ - 硬件断点 WINAPI

c - 如何将 3D 数组从 C 返回到 Java?

c++ - 将代码复制到 RAM - 如何一次复制多个函数?

c - <string.h> 和 <strings.h> 的区别

c++ - 使用 select() 进行非阻塞串行

c - 为什么 #define INVALID_VALUE -999;使用时给出语法错误?

html - 内容覆盖 header

html - 如何将下拉菜单添加到标题导航栏?