22/1/8 C++和C语言的区别及程序调试

(重点部分,序号用加粗斜体标出)
发展过程:C—→ C++—→ Java
但C++是对C语言的扩充和延伸,并且对C语言提供后向兼容的能力。二者在语法上,90%都是相似的。

一、

  1. 不同的程序思维:C语言是面向过程的,而C++是面向对象的。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
    面向过程:分析出解决问题的步骤,然后把这些步骤一步一步的实现,使用时一个一个的依次调用。程序员面对的是函数函数和变量。
    面向对象:把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。程序员面对的是对象,对象又分为两部分,数据(用于保存对象的属性)和方法(用于完成对数据的操作)。对象和对象之间通过消息进行通信。
    面向对象就是高度实物抽象化(功能划分)、面向过程就是自顶向下的编程(步骤划分)
    (如包包子:
    面向过程——开始包,擀好包子皮,用筷子/勺子挖馅料,把馅料放到包子皮中,用手捏好,在包子底部沾一些面粉,把包子放到盖帘上。
    面向对象——人,包包子的工具,包包子的材料,包包子的方法,结果(包好多少个什么馅料的包子))

    C++不能看做带类的C,它带来的是思考和解决问题角度的转变。
  2. C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。
  3. C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。
    4. C++ 只有一个名字空间,而C语言中“结构标志”有独立的名字空间。
    名称空间是C++的特性,用于编写大型程序时组织代码
    C++代码,头文件之后必备语句:
using namespacec std;

std意为standard,标准命名空间

  1. C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。

二、

1.关键字不同

C99有32个关键字,C++98有63个关键字
一些关键字的细微区别:
(1)struct:在C语言中struct定义的变量中不能有函数,而在C++中可以有函数。
(2)malloc :malloc函数的返回值为void*,在C语言中可以赋值给任意类型的指针,在C++中必须强制类型转换,否则报错。
(3)struct和class:class是对struct的扩展,struct默认的访问权限是public,而class默认的访问权限是private。

2.后缀名不同

C源文件后缀.c,C++源文件后缀.cpp,在VS中,如果在创建源文件时什么都不给,默认是.cpp。

3.返回值

C语言中,如果一个函数没有指定返回值类型,默认返回int类型;C++中,如果一个函数没有返回值则必须指定为void。

4.参数列表

在C语言中,函数没有指定参数列表时,默认可以接收任意多个参数;但在C++中,因为严格的参数类型检测,没有参数列表的函数,默认 void,不接收任何参数。

5.缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的参。(C语言不支持缺省参数)

6.函数重载

函数重载:函数重载是函数的一种特殊情况,指在同一作用域中,声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,返回值类型可以相同也可以不同,常用来处理实现功能类似数据类型不同的问题。(C语言没有函数重载,C++支持函数重载)。

三、语法上的区别

1.头文件

2.结构体struct

C++: C++的struct成员包含成员函数
C: C语言的struct的成员只能是数据,不支持函数,因此若要定义结构体的函数需要使用函数指针实现

3.动态数组的创建与删除

以一维和二维动态数组为例:
C++
创建: 使用new自动为动态数组分配空间
删除: 使用delete为动态数组释放内存
C
创建: calloc为动态数组分配空间
删除: free()为动态数组释放内存

4.函数顺序问题

C++中,写在前面的函数可以直接调用写在后面的函数
C中,被调用的函数需要写在调用函数之前

5.类(class)

类是C++引入的类型,可以包含数据,也可以包含函数,解决了C语言struct只能包含数据的缺陷。struct默认public,而class默认private

6.关于for

for(int i=0;i<9;i++) 

C99标准之前的C标准不支持for中定义临时变量,该写法出错。C99标准支持。
需要注意的是,部分编译器不能支持C99标准(如Visual C++6.0),或者默认C89模式进行编译执行。
v3.0以上的gcc 的编译器默认按C89编译。设置按C99标准编译:

-std=c99

CodeBlocks(使用gcc编译器):settings →compiler and debugger →Global compiler settings →Other options,添加上述命令。

7.注释风格

C风格为 /* */
C++风格为//
二者可通用

8.布尔变量

C语言 _Bool
C++ bool

9.STL

C++中的STL(Standard Template Library)标准模板库包含很多函数。
c++标准程序库中,隶属于 STL 的占到了 80%以上。

10.输入输出

C++中有cin和cout
stdio.h是C的标准I/O库,是以函数的方式向buffer(缓冲区)写入或读取字符。
iostream是C++的标准I/O库,引入了输入/输出流的概念,是一个类库,是以类方法从streambuf中读取,写入字符。

关于调试程序

啊哈哈哈,bug来喽——
这debug,多是一件美事啊——

对于一些语法错误,在程序运行后编译器报错时,可以根据编译器的报错找到出错行检查。
一些编译器不会报错的错误:scanf忘记写&、==(等于号)与=(赋值号)混用等等。
Debug前提:程序编译,结果无报错。

1.手动加一些代码进行调试

通常是输出变量的值,通过对值的观察来推断代码出现的问题。方法是:在变量发生变化的地方,在之后通过printf、cout之类的语句,输出变量,运行程序,得到变量在程序运行过程中发生的变化,进行推断。

2.Dev C++调试程序

解决打开debug后闪退的问题

工具 →编译选项,编译器设置改为63位/32位的Debug版(即结尾为Debug)。
代码生成/优化 连接器,将“产生调试信息”改为Yes →确定。
在这里插入图片描述

调试次数

1个断点:代码会从断点行运行调试至代码结束。
≥2个断点:则会分段调试。

进行Debug

  • 工具 → 环境选项 → 基本~浏览Debug变量,选中“查看鼠标指向的变量” → 确定

  • 在这里插入图片描述

  • 在代码行序号位置单击选中断点,表明程序执行到该行的上一行。

  • 上方选择紫色对号(调试)。程序中scanf或cin等表输入的代码,则出现运行程序框,需要手动输入值。

  • 在这里插入图片描述

  • 在代码中设置需要跟踪变化的变量
    方法1:断点行中,选中一个变量,右键 → 添加查看,左侧的调试区域将显示变量的值。

  • 在这里插入图片描述
    方法2:下面的调试栏中,添加查看 →输入变量名。
    在这里插入图片描述

  • 在下方点击“下一步”,蓝色行进行移动,表示当前程序执行到了标记结束位置(标记断点行的上一行)。
    在这里插入图片描述

断点可以不止一个。
debug结束后记得把编译器改回原来的设置。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

延7488

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值