学习C++语言总结之谈

开发 后端
许多编程人员学习C++总结经验为,有的觉得C++语言是一门独立的语言,并不是在C语言的基础上,可以直接学习C++语言不必先从C下手。

对***次接触到C++语言的用户和学者来说,了解C++语言的概念是非常重要的,那么就先说一下什么是C++语言,所谓C++语言:是一种使用非常广泛的计算机编程语言,下面进行学习探讨。

作为一种欲与C兼容的语言,C++语言保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。

为什么标准头文件都有类似以下的结构?

  1. #ifndef __INCvxWorksh  
  2. #define __INCvxWorksh   
  3. #ifdef __cplusplus  
  4. extern "C" {  
  5. #endif   
  6. /*...*/   
  7. #ifdef __cplusplus  
  8. }  
  9. #endif   
  10. #endif /* __INCvxWorksh */ 

那么:

  1. #ifdef __cplusplus  
  2. extern "C" {  
  3.  #endif   
  4.  #ifdef __cplusplus  
  5. }  
  6. #endif   


而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。

  1. /* c语言头文件:cExample.h */  
  2. #ifndef C_EXAMPLE_H  
  3. #define C_EXAMPLE_H  
  4. extern int add(int x,int y);  
  5. #endif  
  6. /* c语言实现文件:cExample.c */  
  7. #include "cExample.h"  
  8. int add( int x, int y )  
  9. {  
  10.  return x + y;  
  11. }  
  12. // c++实现文件,调用add:cppFile.cpp  
  13. extern "C"   
  14. {  
  15.  #include "cExample.h"  
  16. }  
  17. int main(int argc, char* argv[])  
  18. {  
  19.  add(2,3);   
  20.  return 0;  

在C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该头文件,应该仅将C文件中将C++中定义的extern "C"函数声明为extern类型。

  1. //C++头文件 cppExample.h  
  2. #ifndef CPP_EXAMPLE_H  
  3. #define CPP_EXAMPLE_H  
  4. extern "C" int add( int x, int y );  
  5. #endif  
  6. //C++实现文件 cppExample.cpp  
  7. #include "cppExample.h"  
  8. int add( int x, int y )  
  9. {  
  10.  return x + y;  
  11. }  
  12. /* C实现文件 cFile.c  
  13. /* 这样会编译出错:#include "cExample.h" */  
  14. extern int add( int x, int y );  
  15. int main( int argc, char* argv[] )  
  16. {  
  17.  add( 2, 3 );   
  18.  return 0; 

如果深入理解了第3节中所阐述的extern "C"在编译和连接阶段发挥的作用,就能真正理解本节所阐述的从C++引用C函数和C引用C++函数的惯用法。对第4节给出的示例代码,需要特别留意各个细节。 

【编辑推荐】

  1. 简介学习C++总结之谈
  2. 对C++库函数进行学习探索总结笔记
  3. C++类库设计的基本构思与方法
  4. C++语言真的还有市场价值?
  5. C++类库设计的基本构思与方法
责任编辑:chenqingxiang 来源: NET130
相关推荐

2010-01-27 16:52:31

C++语言学习

2010-01-18 10:53:26

2010-01-26 17:53:05

C++入门学习

2010-01-25 11:21:01

C++语法

2010-02-22 09:43:42

学习Python语言

2010-01-27 15:54:49

C++实现程序

2010-01-14 17:02:10

学习C++

2010-01-15 14:52:33

Visual C++

2010-02-02 13:37:12

如何学习Python

2010-02-07 15:12:24

学习Android

2010-03-02 14:37:05

Android开源语言

2010-01-15 16:37:28

Visual C++

2010-02-06 13:36:57

学习Android程序

2010-02-03 15:52:02

Python学习研究

2011-04-19 17:36:12

C++

2011-04-19 17:44:02

C++

2010-01-25 14:31:07

C++类

2010-01-19 14:45:35

C++语言

2010-01-11 14:05:01

C++学习方法

2010-02-05 17:10:01

Android Ado
点赞
收藏

51CTO技术栈公众号