设为首页 加入收藏

TOP

25.2.3 和C代码链接(2)
2013-10-07 15:36:12 来源: 作者: 【 】 浏览:67
Tags:25.2.3 代码 链接

25.2.3  和C代码链接(2)

例如,在下面的代码中,doCFunction()的函数原型指定为一个外部C函数:

  1. extern "C" {  
  2. void doCFunction(int i);  
  3. }  
  4. int main()  
  5. {  
  6. doCFunction(8); // Call the C function.  
  7. return 0;  

doCFunction()函数的实际定义在一个编译好的二进制文件中,链接的时候附上这个文件。extern关键字告诉编译器,链入的代码是使用C语言编译的。

使用extern的一个更常见的模式是在头文件的层次使用。例如,如果您在使用一个用C语言编写的图形库,这个库可能带有一个供您使用的.h文件。您可以编写另一个头文件,将原来的头文件包含在extern块中,表示整个头文件定义的函数都是用C编写的。包装的.h文件通常以.hpp命名,以便和C版本的头文件区分:

  1. // graphicslib.hpp  
  2. extern "C" {  
  3. #include "graphicslib.h"  

另一个常见模型是单独写一个头文件,并且通过条件编译选择C或C++(www.cppentry.com)的部分。如果正在为C++(www.cppentry.com)编译,C++(www.cppentry.com)编译器会预定义一个符号__cplusplus。编译C的时候没有定义这个符号。所以您经常会看到以下形式的头文件:
  1. #ifdef __cplusplus  
  2. extern "C" {  
  3. #endif  
  4. declaration1();  
  5. declaration2();  
  6. #ifdef __cplusplus  
  7. } // matches extern "C"  
  8. #endif 

这意味着declaration1()和declaration2()是C语言编译器编译的库中的函数。使用这种技术,C语言和C++(www.cppentry.com)的客户可以使用同一个头文件。

不论您是在C++(www.cppentry.com)程序中包含C代码,还是链接C语言编译的库,要记住,尽管C++(www.cppentry.com)是C语言的超集,这两种语言实际上是设计目标不同的不同语言。在C++(www.cppentry.com)中采用C语言代码是很常见的,但是给过程式的C语言代码提供面向对象的C++(www.cppentry.com)封装是更好的选择。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇25.2.1 混合使用C和C++ 下一篇25.2.3 和C代码链接(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)