【发布时间】:2019-01-30 12:06:07
【问题描述】:
通常要让 C 库在 C++ 中工作,您必须将其包含在 extern "C" { #include <clibrary.h> } 中。许多库将在其头文件中包含 #ifdef __cplusplus extern "C" { ... 之类的代码,以使它们对 C++ 代码更加用户友好(例如 pthread.h)。有时情况并非如此。例如,stdio.h 没有这样的#ifdef,但我仍然可以使用 C++ 编译器编译和链接通常的#include <stdio.h> int main() {printf("Hello");},而无需将其包装在extern "C" 语句中。为什么是这样?
【问题讨论】:
-
1.因为您应该在 C++ 中使用
cstdio。 2. 不,99% 的 stdio.h 在这个 macro 中有extern "C" -
@KamilCuk stdio.h vs cstdio 与此完全无关。
-
感谢大家的回答。我应该更仔细地看;我只是 grepped stdio.h 寻找 cplusplus 没有深入挖掘。