C语言调试技巧,assert函数与const修饰的常变量

目录

一.C语言使用调试技巧

1.Debug和Release

2.主要快捷键的使用

二.assert函数和comst修饰的常变量

1.assert函数

2.const修饰的常变量


一.C语言使用调试技巧

1.Debug和Release

Debug成为调试版本,包含调试信息,不做任何优化,便于程序员对程序进行调试;Release版本称为发布版本,这个版本往往对代码进行了优化,使的其在大小或者运行速度上都有了提升,以便用户很好的使用,但不能供程序员进行调试(通常时测试人员测试的版本)。因此,.exe文件的debug版本要比relea版本更加繁琐,空间占用更多.

2.主要快捷键的使用

①F5:启动调试,经常来调到下一个断点处 

②F9:创建断点和取消断点,断电的重要作用是使程序直接执行到断点位置停止,直接进行断点位置一下代码内容的调试,即使程序在想要的位置停止执行,通常和F5配合使用

③F10:逐过程进行调试,一个过程可以是一个函数或者一条语句

④F11:逐语句进行调试,即可以使执行逻辑进入函数内部(最常用的)

⑤ctrl+F5:运行程序

⑥shift+F5:结束调试

⑦shift+F11:跳出函数体内部的调试

二.assert函数和comst修饰的常变量

1.assert函数

*又称断言函数,通过自定义函数my_strcpy( )对assert,(需要引用头文件#include<stdio.h>)函数进行解释

首先对对my_strcpy进行实现:

方案一:
void my_strcpy(char* dest, char* src)//址传递,传进来两个字符数组,数组名表示数组首元素地址
{
	if (dest != NULL && src != NULL)
	{
	while (*src)
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;
	}
}


方案二:
char* my_strcpy(char* dest,const char* src)
{
	int ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest++ = *src++)//此处为后置++,即先解引用(*)再++,当*src为''时,判断条件为假,结束循环{;//此处循环体内不需要操作了,判断题已经实现了全部的功能
	{
		;
	}
	return ret;
}

 a.方案一虽然增强了代码的逻辑运行,能够正常结束程序,但是存在缺陷,例如当传址传递传空指针时函数体的功能并不能实现;经过优化后,运用assert函数,假如再传过去空指针时到函数体,程序会给出错误提示。在不降低代码逻辑运行能力的同时又能够很好的找到错误

 b.assert函数的作用:assert起到判断作用,当assert(exp1)为真时,assert不影响程序的运行;当表达式结果为假时,assert函数会给出错误提示

c.关于优化函数:char*方便了函数的使用,将copy过后的目标数组的首地址返回,方便后续代码的直接使用,const在下进行解释

0b0113ee750e45ca8386e7deb8fc6d05.png

2.const修饰的常变量

 *作用:变量经过const修饰后其值不可被改变,例如:

a.①.const放在*的左边,修饰*p,*p不可被改变,例如:
const int a=20;
const int* p = &a;
*p=15;  是错误的,*p已经被const修饰,其值不可以发生改变

②.const放在*的右边,修饰p,意味着指针变量p的值不可再被改变,例如:
const int a=20;
int b = 20;
const int* p = &a;
p=&b;是错误的.

//总的来说,const放在指针变量类型的前面,修饰的是*p,放在*的右边,修饰的是指针变量p,p的值不能再发生改变

b.在my_strcpy函数优化中使用const变量,可以减少一些不必要的bug的出现,为排查错误提供了便利

* my_strcpy函数中const修饰的src:在while循环的判断条件内可以起到防止书写错误的问题,经过const修饰的*src为一个不可被改变的常量,如果在while中出现(*src++ = *dest++),不小心将目标数组和原copy数组写反,则能够很快找到错误

char* my_strcpy(char* dest,const char* src)
{
    int ret = dest;assert(dest != NULL);
    assert(src != NULL);
    while (*dest++ = *src++)   
    {
        ;
    }
    return ret;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小s的s

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

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

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

打赏作者

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

抵扣说明:

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

余额充值