C+中的C头+;程序 我知道C头可以用C++程序预先用C++程序来使用。 然而,我不明白为什么有人会这样做。在C++程序中,C报头是否更适合?有什么情况?

C+中的C头+;程序 我知道C头可以用C++程序预先用C++程序来使用。 然而,我不明白为什么有人会这样做。在C++程序中,C报头是否更适合?有什么情况?,c++,c,header,C++,C,Header,,你通常不需要特别指定你的报头。你可以这么做 extern "C" { #include "your-c-header.h" }; // end extern C 或者甚至把你的头.h之类的东西放进去 #ifdef __cplusplus extern "C" { #endif /// the real content of your header goes here #ifndef __cplusplus }; // end extern C #endif 当然,您还将添加通常的 P>

,你通常不需要特别指定你的报头。你可以这么做

extern "C" {
#include "your-c-header.h"
}; // end extern C
或者甚至把
你的头.h
之类的东西放进去

#ifdef __cplusplus
extern "C" {
#endif
/// the real content of your header goes here
#ifndef __cplusplus
}; // end extern C
#endif
当然,您还将添加通常的

<> P> C++语言最初被设计成C兼容(甚至在今天,C++ 11是“大多数”),但不是与大多数“C99或C11”兼容。所以这个技巧通常是有效的。但是你应该知道C和C++之间的不兼容的情况(这取决于C和C++的特定版本,甚至可能是你的特定实现和操作系统)。 ,C++标准确实定义了一些头名称,如<代码> <代码>,但仅用于包装标准C标题(如<代码> <代码>)。对于其他头文件(比如POSIX头文件,或者您最喜欢的库中的头文件),这并不系统地适用


<>为什么包括C代码头在C++代码中有用:如何不使用标准C API(如POSIX),或者使用一些可用的API和库(例如,代码> <代码>或<代码> <代码>或<代码> <代码> GNU?

< P>您通常不需要特别指定您的头。你可以这么做

extern "C" {
#include "your-c-header.h"
}; // end extern C
或者甚至把
你的头.h
之类的东西放进去

#ifdef __cplusplus
extern "C" {
#endif
/// the real content of your header goes here
#ifndef __cplusplus
}; // end extern C
#endif
当然,您还将添加通常的

<> P> C++语言最初被设计成C兼容(甚至在今天,C++ 11是“大多数”),但不是与大多数“C99或C11”兼容。所以这个技巧通常是有效的。但是你应该知道C和C++之间的不兼容的情况(这取决于C和C++的特定版本,甚至可能是你的特定实现和操作系统)。 ,C++标准确实定义了一些头名称,如<代码> <代码>,但仅用于包装标准C标题(如<代码> <代码>)。对于其他头文件(比如POSIX头文件,或者您最喜欢的库中的头文件),这并不系统地适用


<>为什么包括C代码头在C++代码中有用:如何不使用标准C API(如POSIX),或者使用一些可用的API和库(例如,代码> <代码>或<代码> <代码>或<代码> <代码> GNU?

< P>您通常不需要特别指定您的头。你可以这么做

extern "C" {
#include "your-c-header.h"
}; // end extern C
或者甚至把
你的头.h
之类的东西放进去

#ifdef __cplusplus
extern "C" {
#endif
/// the real content of your header goes here
#ifndef __cplusplus
}; // end extern C
#endif
当然,您还将添加通常的

<> P> C++语言最初被设计成C兼容(甚至在今天,C++ 11是“大多数”),但不是与大多数“C99或C11”兼容。所以这个技巧通常是有效的。但是你应该知道C和C++之间的不兼容的情况(这取决于C和C++的特定版本,甚至可能是你的特定实现和操作系统)。 ,C++标准确实定义了一些头名称,如<代码> <代码>,但仅用于包装标准C标题(如<代码> <代码>)。对于其他头文件(比如POSIX头文件,或者您最喜欢的库中的头文件),这并不系统地适用


<>为什么包括C代码头在C++代码中有用:如何不使用标准C API(如POSIX),或者使用一些可用的API和库(例如,代码> <代码>或<代码> <代码>或<代码> <代码> GNU?

< P>您通常不需要特别指定您的头。你可以这么做

extern "C" {
#include "your-c-header.h"
}; // end extern C
或者甚至把
你的头.h
之类的东西放进去

#ifdef __cplusplus
extern "C" {
#endif
/// the real content of your header goes here
#ifndef __cplusplus
}; // end extern C
#endif
当然,您还将添加通常的

<> P> C++语言最初被设计成C兼容(甚至在今天,C++ 11是“大多数”),但不是与大多数“C99或C11”兼容。所以这个技巧通常是有效的。但是你应该知道C和C++之间的不兼容的情况(这取决于C和C++的特定版本,甚至可能是你的特定实现和操作系统)。 ,C++标准确实定义了一些头名称,如<代码> <代码>,但仅用于包装标准C标题(如<代码> <代码>)。对于其他头文件(比如POSIX头文件,或者您最喜欢的库中的头文件),这并不系统地适用


<为什么>包括C头在C++代码中有用:如何不使用标准C API(如POSIX),或者使用一些可用的API和库(例如,代码> <代码>或<代码> <代码>或<代码>从GNU?

< P>使用C标题的主要原因是与C编译器编译的一些代码互操作。不能使用C++头,因为它们会生成不同的符号名称,因为C++。 例如,您有一个已编译的静态库和一个在C头中定义的函数:

void foo(int);
静态库中此函数的符号仅为

foo
你试图在C++应用程序中使用这个库,但是C++编译器会寻找这个符号(在Visual C++的情况下)< /p>
因此,您将得到一个链接器错误。为了防止此错误,您需要在
extern C
子句中包含此标头。

使用C标头的主要原因是与使用C编译器编译的某些代码进行互操作。不能使用C++头,因为它们会生成不同的符号名称,因为C++。 例如,您有一个已编译的静态库和一个在C头中定义的函数:

void foo(int);
静态库中此函数的符号仅为

foo
你试图在C++应用程序中使用这个库,但是C++编译器会寻找这个符号(在Visual C++的情况下)< /p>
因此,您将得到一个链接器错误。为了防止此错误,您需要在
extern C
子句中包含此标头。

使用C标头的主要原因是与使用C编译器编译的某些代码进行互操作。不能使用C++头,因为它们会生成不同的符号名称。