zoukankan      html  css  js  c++  java
  • 浅谈C、C++及其区别、兼容与不兼容

    一、闲说C

    C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。

    1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。并且他用B语言写了第一个UNIX操作系统。

    1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

    C语言非常简洁,只有32个关键字,9种控制语句,34种运算符。

     

    具体来说,C语言是一个结构化语言,重点在于数据结构和算法的实现。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。

    C语言可以做任何用处,但最大的用处还是写写操作系统和编译器之类的。

    C 语言是非常有效率的,很多时候你都需要考虑内存的管理等底层的东西。很可惜这些都需要你去花很多的时间去做。作为一种底层编程语言,可以通过指针进行很直接的内存管理,另外,很多语言都是用 C 来设计的, 比如 perl , java, python。

    C语言是一种通用性的编程语言,它既具有高级语言的特点,又具有汇编语言的特点。,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。尽管C语言是为实现操作系统软件而设计的,但它也广泛的应用于开发便携式应用软件。

    代码:

    1 #include<stdio.h>
    2 int main(void) 
    3 {
    4     printf("hello, world!n");
    5     return 0;
    6 }

    二、闲说C++

    20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。

    由此可见,C++是C的继续和发展。C++功能强大,可以因应开发大型应用软件。即可以面向对象,也可以兼容C,可以面向过程。

    C++是一种复杂、难以掌握的语言,不仅体现在其语法,更体现在其提供了4种编程思维模型上面,包括:procedural-based, object-based, object-oriented, generic paradigm。由此C++是既有效率,又有弹性;既可以面向对象,又兼容面向过程。

    C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。

    C++是最流行的编程语言之一,它的应用领域涵盖了系统软件、应用软件、驱动程序、嵌入式软件、高性能的服务器与客户端应用程序和诸如电视游戏等娱乐软件。

    代码:

    1 #include<iostream>
    2 using namespace std;
    3 int main()
    4 {
    5     cout << "Hello, world" << endl;
    6     return 0;
    7 }

    三、C和C++的联系与区别

    面向过程的思路:分析解决问题所需的步骤,用函数把这些步骤依次实现。

    面向对象的思路:把构成问题的事务分解为各个对象,建立对象的目的,不是完成一个步骤,而是描述某个事务在解决整个问题步骤中的行为。

    从上述描述可以看出,其实面向对象和面向过程是两种思考解决问题的方式,其差异主要在于思考的角度。

    C语言是面向过程的编程,它最重要的特点是函数,通过main函数来调用各个子函数。程序运行的顺序都是程序员事先决定好的。

    C++是面向对象的编程,类是它的主要特点,在程序执行过程中,先由主main函数进入,定义一些类,根据需要执行类的成员函数,过程的概念被淡化了(实际上过程还是有的,就是主函数的哪些语句),以类驱动程序运行,类就是对象,所以我们称之为面向对象程序设计。面向对象在分析和解决问题的时候,将涉及到的数据和数据的操作封装在类中,通过类可以创建对象,以事件或消息来驱动对象执行处理。

    C语言和C++的最大区别在于它们解决问题的思想方法不一样。C语言主要用于嵌入式领域,驱动开发等与硬件直接打交道的领域, C++可以用于应用层开发,用户界面开发等于操作系统打交道的领域。

    C++既继承了C强大的底层操作特性,又被赋予了教科书式的面向对象机制。它特性繁多,有其他面向对象语言鲜见的多继承,有耐人寻味的对值传递与引用传递入木三分的区分以及const关键字,等等。C++就像是一把瑞士军刀,或者像是一个工具箱,它为你提供尽可能多的工具,多到让不熟悉它的人无所适从,让懂得如何使用它的人如鱼得水。C++的种种特性使得它非常适合用来编写底层数据结构,算法,库等,是系统软件开发以及数学模型构建等的强大武器库,被誉为工业级编程语言。

    C++对C的“增强”,表现在以下几个方面:

    类型检查更为严格。增加了面向对象的机制。增加了泛型编程的机制(Template)。增加了异常处理。增加了运算符重载。增加了标准模板库(STL)。增加了命名空间,避免全局命名冲突。

    四、C++与C不兼容之处

    C的大部分代码在C++上都能应用,而C++的代码在C上不能应用。(记住是大部分,不是所有)

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

    4.1 变量声明的位置

    C中变量声明和代码是分开的,必须在函数开始处声明;

    C++中,变量可以在任意处声明,只要保证先声名后使用的原则就可以。

    4.2 struct结构体方面

    用struct定义变量

    struct mystruct{ int i;float x;

    在c中声明struct变量要这么写:struct mystruct a;

    在C++中前面不用加struct:mystruct a;

    一种兼容的用法是:

    typedef struct _mystructint i;float x;} mystruct;

    然后用mystruct 定义变量。枚举型(enum),联合体类型(union)也是同样。

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

    4.3 bool类型值

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

    4.4 注释的不同

    C中的注释至有一种 /*......*/;

    C++中的注释包含两种/*......*/和//。

    4.5 强制数据类型装换

    C中的强制转化形式为:(类型)变量;

    C++中还可以使用:类型(变量)的形式。

    4.6 赋值

    C语言中的赋值只有一中即:=;

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

    4.7 函数

    C语言中函数没有参数默认值,在C++中函数有参数默认值的概念,注意参数默认值与函数重载的区别。

    C语言中函数的定义又两种形式,经典形式和标准形式,C++中只支持标准形式。

    标准形式:int string(int x,float y){......}

    经典形式: int string(x,y)int x;float y;{......}

    C++的函数必须先声名原型或定义才能使用,因为C++是强数据类型语言,在C语言中,未声名和定义函数之前调用函数是允许的.

    4.8 运算符&和关键字const

    &运算符最基本的含义是取地址,C和C++中都支持这一语法。但在C++中&还可以表示引用。有了引用的概念后函数调用可以作为左值。例如:

    int &rtux()......rtux()=5;

    以上表达式在C++中完全正确,但在C语言中是非法的。

    const关键字要注意一点不同的就是在C++的类函数中,函数可以声名是可以用const,表示这个函数没有改变类中的任何属性。如:void unchange()const;C不能有这样的生明。

    4.9 extern说明符

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

    4.10 void指针

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

    作者:耑新新,发布于  博客园

    转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com

  • 相关阅读:
    ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
    ASP.NET Web API 框架研究 核心的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
    ASP.NET Web API 框架研究 ASP.NET Web API 路由
    ASP.NET Web API 框架研究 ASP.NET 路由
    ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
    MVVM模式
    RESTful Web API 理解
    C# 函数式编程及Monads.net库
  • 原文地址:https://www.cnblogs.com/Arthurian/p/6246013.html
Copyright © 2011-2022 走看看