Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “外部”;",;,它有什么用处?_C++_C_C Preprocessor - Fatal编程技术网

C++ “外部”;",;,它有什么用处?

C++ “外部”;",;,它有什么用处?,c++,c,c-preprocessor,C++,C,C Preprocessor,可能重复: 我在很多图书馆都会遇到以下几行:;它们有什么用?何时/何地定义了cplusplus #ifdef __cplusplus extern "C" { #endif //... #ifdef __cplusplus } #endif < C++ >代码> >代码>有时你必须混合C代码和C++代码。这可能有很多原因,例如,您有一个很久以前用C编写的驱动程序,您希望在全新的C++0x项目中使用它 每个函数类型和名称都有一个语言链接。C与C++的函数有区别,因为C没有函

可能重复:

我在很多图书馆都会遇到以下几行:;它们有什么用?何时/何地定义了cplusplus

#ifdef __cplusplus
    extern "C" {
#endif

//...

#ifdef __cplusplus
    }
#endif

< C++ >代码> >代码>有时你必须混合C代码和C++代码。这可能有很多原因,例如,您有一个很久以前用C编写的驱动程序,您希望在全新的C++0x项目中使用它

每个函数类型和名称都有一个语言链接。C与C++的函数有区别,因为C没有函数名重载,函数名可以作为C中唯一的标识符,但是不能在C++中使用。这就是所谓的

由于不需要在C中损坏名称,因此使用
extern“C”
将使编译器忽略添加链接的参数信息

C++标准明确地在7.5个PARA 3中声明:

每个实现应提供与书面形式的功能的链接 C语言程序设计,C语言,与C++函数的连接,“C++”。
< C++ >代码> >代码>有时你必须混合C代码和C++代码。这可能有很多原因,例如,您有一个很久以前用C编写的驱动程序,您希望在全新的C++0x项目中使用它

每个函数类型和名称都有一个语言链接。C与C++的函数有区别,因为C没有函数名重载,函数名可以作为C中唯一的标识符,但是不能在C++中使用。这就是所谓的

由于不需要在C中损坏名称,因此使用
extern“C”
将使编译器忽略添加链接的参数信息

C++标准明确地在7.5个PARA 3中声明:

每个实现应提供与书面形式的功能的链接 C语言程序设计,C语言,与C++函数的连接,“C++”。
对于@singerofthefall Awesome,你可以在括号里放任何你想要的C代码?什么是7.5帕拉3?@萨阿德,是的,它用于在C++内部包含有效的C代码。7.5第3段是我引用的标准的一部分,“让你执行C代码”完全是胡说八道。C++中的一切都是C++。code>extern“C”只是一个链接说明符。@SingerOfTheFall你有到该标准的链接吗?@saad,该标准本身是可以购买的,你不能正式免费获得它,但是,你可以找到一个最新的草稿,通常是免费的,与最终版本没有太大区别。@SingerOfTheFall真棒,你可以在括号里放任何你想要的C代码?什么是7.5帕拉3?@萨阿德,是的,它用于在C++内部包含有效的C代码。7.5第3段是我引用的标准的一部分,“让你执行C代码”完全是胡说八道。C++中的一切都是C++。code>extern“C”只是一个链接说明符。@SingerOfTheFall你有到标准的链接吗?@saad,标准本身是可以购买的,你不能正式免费获得它,但是,你可以找到一个最新的草稿,它通常是免费的,与最终版本没有太大区别。
complex sqrt(complex); //C++ linkage by default
extern "C" {
    double sqrt(double);//C linkage
}