Debug和Release介绍
Posted 张同学吧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Debug和Release介绍相关的知识,希望对你有一定的参考价值。
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 代码:
#include<stdio.h>
int checkData(int* p)
{
char tmp = 0;
int i;
for (i = 0; i < 5; i++)
{
tmp |= 1 << p[i];
//tmp每次或上一位1,p[i]如果是1~5都有,则1<<1到1<<5都或上的结果将会是00111110,如果有并列,则一定会至少却其中一个1,结果就不会是00111110,所以可以判断tmp最终的结果是不是这个数字来判断有没有重复。
}
return tmp == 0x3E;
}
void diveRank(int* p, int n)
{
if (n >= 5) //此时的n是用来控制循环层数的。
{
if ((p[1] == 2) + (p[0] == 3) == 1 && //B第二,我第三
(p[1] == 2) + (p[4] == 4) == 1 && //我第二,E第四
(p[2] == 1) + (p[3] == 2) == 1 && //我第一,D第二
(p[2] == 5) + (p[3] == 3) == 1 && //C最后,我第三
(p[4] == 4) + (p[0] == 1) == 1 && //我第四,A第一
checkData(p)) //查重
{
for (int i = 0; i < 5; i++)
{
printf("%d ", p[i]);
}
putchar('\\n');
}
return;
}
for (p[n] = 1; p[n] <= 5; p[n]++)
{
diveRank(p, n + 1); //通过递归模拟多层循环,每进一次递归相当于进了一层新的循环。
}
}
int main()
{
int p[5];
diveRank(p, 0);
return 0;
}
我们可以看到,release版本的可执行程序比debug小很多。所以我们说调试就是在Debug版本的环境中,找代码中潜伏的问题的一个过程。变量在内存中开辟的顺序发生了变化,影响到了程序执行的结果,这就是优化。
要想成为程序员就要多多动手,尝试调试,才能有进步。一定要熟练掌握调试技巧。初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。多多使用快捷键,提升效率
int main()
{
int i = 0;
int sum = 0;//保存最终结果
int n = 0;
int ret = 1;//保存n的阶乘
scanf("%d", &n);
for(i=1; i<=n; i++)
{
int j = 0;
for(j=1; j<=i; j++)
{
ret *= j;
}
sum += ret;
}
printf("%d\\n", sum);
return 0;
}
-首先推测问题出现的原因。初步确定问题可能的原因最好。
-实际上手调试很有必要。
-调试的时候我们心里有数。
我们通过调试来逐渐缩小问题的范围。上面实例中,很有可能是在循环语句出现了问题。所以我们在scanf语句处打一个断点。
在i=3,j=1时,本来ret应该是从1开始乘,但是此时的ret却是从2开始的(大家可以亲自去调试感受一下),所以这就是bug。那么我们期待的是,ret从每一次循环开始都被重置为1.所以我们应该在第一层for循环内加上 int ret = 1;
我们再执行一次就可以发现结果正确了
优秀的代码:
-
代码运行正常
-
bug很少
-
效率高
-
可读性高
-
可维护性高
-
注释清晰
-
文档齐全
常见的coding技巧: -
使用assert:判断字符串是否为NULL,如果为NULL会弹框
-
尽量使用const:
const修饰指针变量的时候:
const如果放在* 的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改 变。但是指针变量本身的内容可变。
const如果放在* 的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指 针指向的内容,可以通过指针改变
- 养成良好的编码风格
- 添加必要的注释
- 避免编码的陷阱
加油,代码人!
以上是关于Debug和Release介绍的主要内容,如果未能解决你的问题,请参考以下文章