C与C++的区别

在将C程序向C++程序转换时,应该看一看下面这些C++程序与C程序不同的地方,并做相应的修改:

  • 在声明时,如故哦声明的函数具有void类型之外的返回类型,则在C++函数的实现中必须具有返回值。如果在函数的实现中没有值返回,C可能会给出警告,但是在C++中,这种情况是无法通过编译的。
  • C++中,必须对函数定义标题中的变量进行声明,而不能使用旧式C函数的语法(C的头几个版本支持这种旧用法)。例如,下面的函数定义标题在C中是有效的:

                    void swap(a,b)

                    double *a,*b;

                    {

                        ...

                    }

     但是上面的语法在C++中是无效的,必须作如下修改:

                    void swap(double *a,double *b)

  • C++引入了严格的类型检查。特别是不能将一个地址或者指针赋值给另外一个不同类型的指针,除非使用类强制转换或者给一个void类型的指针赋值。在C中,在不同类型的指针间赋值只不过会给出警告;但是在C++中,这是一个严重的错误。
  • C++中,函数在使用之前必须先进行声明。而在C中,可以无需事先进行函数声明。这时C假定函数的返回类型是int型并且函数的参数列表是不确定的。当然这种编程习惯并不好,最好不要使用。
  • C++程序中可能会出现一些C程序中所没有的名称的冲突。例如在C中,可以在将某个全局名称用于结构或者联合的名称之后(这样的名称叫做“标签名称”,与使用typedef定义的名称的用法正好相反),再用它命名某个函数或者变量。因为C++将所有的标示符放在同一个命名空间,所以C++不允许出现这种名称重复使用的情况。型号,这种名称的冲突很少出现。

 

在使用CC++源模块混合编程时还要注意另外一个陷阱。对于同一个符号,在生成.obj文件时C++生成一个完全不同的名称。C++的名称转换规则在名称中加入类型信息,这样.obj文件中就会包含类型信息。于是,连接程序就不会将声明为int型的变量Var与声明为float型的Var看作同一个符号(这称为“类型安全连接”)而且,C++的转换规则在应用时是大不相同的,所以不要徒劳地对符号名称做什么假设。

 

结果,在将CC++模块进行连接时,它们可能不能识别彼此的符号。不过,C++提供了一个简单的解决办法:在C++中使用externC”声明来引入在C中定义的符号。extern"C"声明禁止C++将类型信息加入到名称中。

     

          extern"C"

         {

           long way_home         //C模块中定义了way_home

           }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值