【发布时间】:2011-02-17 07:34:27
【问题描述】:
也许我不了解 C 和 C++ 之间的区别,但我们何时以及为什么需要使用
extern "C" {
?显然它是一个“链接约定”。
我简要地阅读了它,并注意到 MSVS 中包含的所有 .h 头文件都用它包围了它们的代码。究竟什么类型的代码是“C 代码”而不是“C++ 代码”?我以为 C++ 包含所有 C 代码?
我猜测情况并非如此,C++ 是不同的,标准特性/功能存在于其中一个或另一个但不是两者都存在(即:printf 是 C 而 cout 是 C++),但 C++ 是倒退的通过外部“C”声明兼容。这是正确的吗?
我的下一个问题取决于第一个问题的答案,但无论如何我都会在这里问:由于用 C 编写的 MSVS 头文件被 extern "C" { ... } 包围,你什么时候需要自己在自己的代码中使用它?如果您的代码是 C 代码并且您尝试在 C++ 编译器中对其进行编译,那么它是否应该毫无问题地工作,因为您包含的所有标准 h 文件都已经在 C++ 编译器中包含了 extern "C" 的东西?
在 C++ 中编译但链接到已构建的 C 库或其他东西时是否必须使用它?
【问题讨论】:
-
C++ 不是 C 的超集。有效的 C 不是有效的 C++。
-
@YannRamin 你应该链接一些有用的东西来验证你的论点。