C专家编程 十六 从C转换到C++

        学习C++最好的方式就是从它的ANSI C子集开始编程。避免使用早期基于CFront的编译器,它所产生的是C代码而不是机器代码。把C语言作为一种可移植的机器语言事实上会使链接和调试复杂化,因为CFront把所有的函数名字混合在一起,为参数信息编写内部代码。名字混合并不可靠,它会带来可怕的危险,并可能长期存在于C++中。与C++相反,Ada对这个问题的处理非常得体,而且它并不使用不正规的实现方法来定义语言的语义。名字混合是一种在不同的文件之间进行类型检查时采用的权宜之策,但它暗示你所有的C++代码必须用同一个编译器编译,因为名字混合策略在不同的编译器上可能各不相同。对于C++的复用模型而言,这是一个巨大的缺陷,因为它有效地防止了二进制一级的复用。

在C++中存在,但在C语言中却不存在的限制有:

•在C++中,用户代码不能调用main()函数,但在C语言中却是允许的(不过这种情况极为罕见)。

•完整的函数原型声明在C++中是必须的,但在C语言中却没这么严格。

        •在C++中,由typedef定义的名字不能与已有的结构标签冲突,但在C语言中却是允 许的(它们分属不同的名字空间)。

•当void*指针赋值给另一个类型的指针时,C++规定必须进行强制类型转换,但在C 语言中却无必要。

在C++和C语言中含义不一样的特性:

        • C++至少增加了十几个关键字。这些关键字在c语言中可以作为标识符使用,但如果 这样做了,用C++编译器编译这些代码时就会产生错误信息。
        •在C++中,声明可以出现在语句可以出现的任何地方。在c语言中的代码块中,所 有的声明必须出现在所有语句的前面。

•在C++中,一个内层范围的结构名将会隐藏外层空间中相同的对象名。在C语言中 则非如此。

        •在C++中,字符常量的类型是char,但在C语言中,它们的类型是int。也就是说,在C++中,sizeof(‘a’)的结杲是1,而在C语言中,它的值要大一些。

•由于C++增加了新的//注释符,有时会在两种语言中产生微妙而怪异的差别。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值