C与C++的不兼容性

C++是C语言的超集,虽然C++兼容C,但是C++中也有与C语言中不兼容的地方。


一、变量声明的位置
    C中变量声明和代码是分开的,必须在函数开始处声明;
    C++中,变量可以在任意处声明,只要保证先声名后使用的原则就可以。


二、struct结构体方面
   1、用struct定义变量
   struct mystruct 
   { int i; 
     float x;
   }
   在c中声明struct变量要这么写:struct mystruct a;
   在C++中前面不用加struct:mystruct a;
   一种兼容的用法是:
  typedef struct _mystruct
          {
     int i;
            float x;
   } mystruct;
   然后用mystruct 定义变量。枚举型(enum),联合体类型(union)也是同样。


   2、在C++中,struct结构体支持成员函数的定义,C中不行。另外要注意的是,C++中成员函数的默认访问说明符为public,这一点和类不同,类的默认访问说明符为private.


三、bool类型值
    C++中有bool(或boolean类型);C中可没有这样的bool类型,均为数值类型!需要注意的是真为非零(如:1,52,-5,-2等),假的数值为0。


四、注释的不同
    C中的注释至有一种 /*......*/;
    C++中的注释包含两种/*......*/和//。


五、强制数据类型装换
  C中的强制转化形式为:(类型)变量;
  C++中还可以使用:类型(变量)的形式。


六、赋值
    C语言中的赋值只有一中即:=;
    C++中除了使用=外,还可以使用()。例如:int  x(5);就等于: int x=5;我想这种写法是给C++中对象初始化时初始化属性是对象时使用的,那么对于基本类型也可以使用了。


七、函数
    1、C语言中函数没有参数默认值,在C++中函数有参数默认值的概念,注意参数默认值与函数重载的区别。
    2、C语言中函数的定义又两种形式,经典形式和标准形式,C++中只支持标准形式。
    标准形式:int string(int x,float y){......}
    经典形式:  int string(x,y)int x;float y;{......}
    3、C++的函数必须先声名原型或定义才能使用,因为C++是强数据类型语言,在C语言中,未声名和定义函数之前调用函数是允许的.


八、运算符&和关键字const
    &运算符最基本的含义是取地址,C和C++中都支持这一语法。但在C++中&还可以表示引用。有了引用的概念后函数调用可以作为左值。例如:
    int &rtux()
    {
      ......
      }
    rtux()=5;
    以上表达式在C++中完全正确,但在C语言中是非法的。  
    const关键字要注意一点不同的就是在C++的类函数中,函数可以声名是可以用const,表示这个函数没有改变类中的任何属性。如:void unchange()const;C不能有这样的生明。


九、extern说明符
    在C语言的某些版本中,可以在程序中多次使用一个全局变量而无需使用extern说明符。但在C++中除定义全局变量外,在其他模块使用应先用extern生明。


十、void指针
    在C语言中void指针可以赋给任何类型的指针,但在C++中,却不行,但可以先进行强制数据类型转换,在赋值。

你可能感兴趣的:(C++语言,c++,c语言)