c语言怎么检测
㈠ c语言进阶04-预防、检测及消除bug
01
开发软件不等于编码
写程序时会有"编码-->测试-->调试"的习惯.很不幸,这是开发软件的错误方法.专业的程序员会使用策略来预防、检测及消除软件bug.编码不是在开发软件.编码的意思是在文本编辑器中输入语句.编码只是开发软件的小部分.开发软件需要编程前、编程中、编程后的许多步骤.下面分着讲解.
02
编程前
1、了解需求.
2、考虑可能的输入和期望的输出.
3、识别出有效但非期望的输入和正确的输出.这是对于开发可靠的软件而言是一个关键点.
4、识别出无效输入并找到检测它们的方法.要注意即使输入无效的数据时,程序也不能奔溃.
5、想出解决办法,并记录.
6、设计程序,可以节省大量的时间.
03
编程中
1、若想正确且更快的完成程序, 就写更多的代码.为了满足一个要求而把代码放到一个更大的程序之前,写一个小程序来测试你的解决方案.即单元测试.
2、使用自动缩进的文本编辑器可以帮你检查代码是否对齐,可以节省宝贵的时间.
3、在运行之前一行一行的读代码.可以帮你找到通过测试很难发现的问题.
4、自己想一些测试例子. 若自己不知道自己写的代码,则计算机也不知道.
5、尽量使用函数来重构代码,避免复制代码.
6、要用版本控制系统(这不是废话吗).
7、编译时,警告信息也不要放过.
04
编程后
不要依赖测试,测试只会告诉你程序没有正常工作,不会告诉你程序真的在正常运行.很可能测试用例没有涵盖所有可能的方案.通过测试用例涵盖所有可能的方案是很困难的.
05
常见错误
未初始化变量: 一些人认为所有的变量都会自动初始化为0,C语言中不会初始化.通过测试很难测试出来.
错误数据类型: 需要理解并正确地使用类型,编程语言的趋势是让数据类型更有限制性,防止犯意外的错误.
06
后执行式和交互式调试
调试一个程序分为几个阶段, 举个列子:
1、从一个文件中读取一些整数;
2、把整数排序;
3、把排好序的整数存到另一个文件中;
单元测试: 在上面三部整合之前测试每一部分叫作单元测试.
对于单元测试,经常需要写一些额外的代码,作为单独部分的"驱动".调试可能是交互式或后执行式的.若程序会花费几个小时,你就不会想要用交互式来调试这个程序了.相反,你会想要程序打印出调试信息,即日志.
对交互式调试而言打印调试信息存在多个问题:
1、需要插入代码来打印调试信息.多数情况下,调试信息必须在随后被移除,因为此信息不应该出现在最终的代码和它的输出中.
2、如果有很少的信息,那么就会缺少足够的信息帮助你判断哪里错了.
3、如果信息太多,可以忽略不相关的信息,获得好信息是很困难的.
4、最糟糕的是,问题可能会出现在意想不到的地方,而那里却并未插入调试信息.结果就是添加越来越多的调试信息.这是很耗时的.
07
生产代码与测试代码分离
自己应该能检测出自身bug的程序.编写程序之前就应该考虑编写测试代码.这是普遍的做法,这个称为 测试驱动的开发. 开发的时候需要将测试代码和开发代码分开,这样可以随意删除测试代码.
㈡ C语言如何检测点击的按钮
通常很多情况下,会有这样的事情,就是:
我们在运行某些程序的时候,发现按钮置灰了,比如购买版权或者输入序列号才能够获得访问权限。某个按钮才允许点击。
其实所有的这些东西都是 别的人或者公司利用一些编程语言调用windows的函数,实现的。所以如果我们也能调用windows的函数,那么我们就能够执行一些按钮或者某些东西背后的函数。
自己的mfc还暂时 用不了,不过 可以 试试这个。
调出这个界面,看到有一个置灰的设置按钮。我们可以试着调用这个后面的函数。
/*如何调出来?【在win7环境下】
打开控制面板
点击鼠标。*/
然后利用vs的工具中的spy++ x64。
进入查找窗口。
拖住这个到刚刚鼠标的那个置灰的按钮上面。就可以得到一个句柄。
句柄【在我理解,就是一个话把子,怎么解释,就是,别人说一件事儿,你得顺着往下说才能把话接下来,然后完成你想说的东西。在程序里面,执行到这里,有这样一个句柄,允许我们说话了,我们就从这一点开始,顺着往下说,往往就能得到我们想要的结果】
所以得到了句柄之后。我们可以新建一个工程。
#include <windows.h>
int main(){
SendMessage(0x001607E6,WM_LBUTTONDOWN,0,0);
SendMessage(0x001607E6,WM_LBUTTONUP,0,0);
return 0;
}
//在HWND的第一个参数里面输入刚刚的句柄。
//猜测 第二个参数 是 WindowManager_LeftButtonDown,就是窗口管理器左键按钮点下。
//然后左键按钮弹起。
就强制的往刚刚不能执行的函数里面发送了一个信息。前面的引文介绍说,这就是调用了windows底层的一些函数,如果按钮可以点击,则鼠标点击,按钮按下,当需要注册的时候,或者需要序列号的时候我们并没有,就不能点击。但是当我们给他发送一条消息以后,是不是问题就解决了。
㈢ C语言怎么检查对错
用微软的VC6.0就可以,点编译,就是那个小叹号,如果是语法错误,就会提示你错误,在下面的框里提示你哪行错误,编译不会通过,即你的程序无法运行。
然而这是很简单的,最难的是逻辑错误,即编译可以通过,而运行结果是错误的,和你预想的不一样,而这种错误很难查找,只能用分步式运行,一行一行跟着程序执行看结果和过程,才能检测出来。通常程序员最难解决的错误就是这种逻辑错误。
㈣ c语言编程怎么测试程序的对错
自己好好看看程序吧,别依靠编译器,编译器不是万能的!
1.语法错误
在编译前浏览程序的源代码看看是否有明显的错误。
可以查看由编译器发现的错误。
发现错误——从第一个开始修改,每次修改1~2个,然后重现编译。
发现的错误位置可能比真正的错误要滞后一行。
2.语义错误
比较程序实际得到的结果和预期结果。
跟踪程序,执行步骤——可用EXCEL(语句行×变量值)
在程序的几个关键点处加入额外的printf()语句以监视所选变量的值。
或用调试器。
㈤ c语言,有向图里如何检测是否有环
1、为其定义一个名称,就叫【StackEmpty】。