十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
简单来说,有两种方式,一种是源码debug,即分析源码来找出bug位置,一般使用printf()打印出程序执行每一步的信息,一种是可执行文件debug,需要使用调试器来进行。
专注于为中小企业提供成都网站设计、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业永修免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
1、源码debug
类似于下面的源码,主要通过程序执行时输出的信息,来定位bug出现的位置,然后再修改源码。
#include stdio.h
void f() { ; }
int main()
{
#ifdef _DEBUG
printf("start main function!\n");
#endif
void f();
#ifdef _DEBUG
printf("leave main function !\n");
#endif
return 0;
}
2、可执行文件调试,windows平台常用的就是vs/vc自带的调试,另外一个就是微软自家开发的调试器windbg。Linux平台以gdb为常用。
IDE自带的调试器以VC6.0为例,编写完代码后,按快截键盘F11,即可进入调试,此时右键,选择“go to disassembly"即可查看到程序的反汇编代码 。一般这种情况,主要是为了对C语言进行反汇编学习。
Windbg的功能非常多,可以进行源码调试、可以调试可执行文件、还可以进行内核调试,也可以调试dump文件,用的多了,自然熟悉,要调试可执行文件,只需要点击”File"在弹出的对话框中选择“Open Executeable",然后找到自己要调试的程序即可。
Linux常用的是Gdb调试器,值得注意的是,要使用gdb调试,在使用gcc或者g++编译C/c++文件时,需要添加-g参数才可以生成符号表。下图是用gdb分析C++中变量分布的一张截图,大体上看一下长什么样,用的多了自然熟悉,不需要可以去学习。
go是用作调试运行的,按F9设置了设置断点之后他会运行到断点处就停下,然后按
F10
可以一行一行的往下运行,按一次向下走一行,这样容易找到错误出在什么地方.
那个红色的
感叹号
就直接运行程序,
1、C语言中goto又叫无条件转移语句,可以让程序直接跳转到任意标记的位置。用法就是“goto label……label:”。下面用一个示例来演示具体的用法,这里先新建一个C语言的程序文件,演示使用的是Visual Studio软件作为开发工具:
2、输入goto语句应用代码,这里先定义两个变量a和b,然后用printf函数打印两句话,直接用goto语句强制跳转到打印b语句的end标记位置,此时a的打印就不会执行了:
3、编译执行程序,按下crtl+F5打开命令行,就可以看到执行的结果,打印出了b语句,和预期的结果一样。以上就是C语言中goto的用法:
C语言中goto的使用方法
goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
如: label: i++;
loop: while(x7);
C语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句。
goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
C语言goto 的使用方法
这个语句最好不要使用,因为它不符合结构化程序的设计思想。
如果要用的,其实也很简单,先设置一个标签,然后用它就可以跳转到这个标签了
标签可以位于goto的前面,也可以位于它的后面,如:
#include stdio.h
int main(void)
{
goto l1;
l1:printf("%d",5);
return 0;
}
C语言中atof()的使用方法
+ 函数说明
- + atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
- ==哈工大 Wiki 所有分项== + 返回值
+ 返回转换后的浮点型数。
+ 附加说明
+ atof()与使用strtod(nptr,(char**)NULL)结果相同。
+ 范例
+ /* 将字符串a 与字符串b转换成数字后相加*/
+ #includestdlib.h
+ main()
+ {
+ char *a=”-100.23”;
+ char *b=”200e-2”;
+ float c;
+ c=atof(a)+atof(b);
+ printf(“c=%.2f\n”,c);
+ }
+ 执行
+ c=-98.23
c语言中return的使用方法
前两个没区别,后面就有区别;
比如在循环里面 出现return;就表示返回到循环,后面的代码就不会执行了,意思就是提前结束当前循环
return b;return(b);
就是好返回值;
public int abc()
{
return b;
}
int sd = abc();
sd的值就是 b的值
c语言中continue的使用方法
continue语句的功能只有在循环体内才有体现,执行该语句的目的是,该语句以下,到循环体结束部分的语句全部跳过,以便进入下一次循环,至于下一个循环是否进行,取决于循环控制条件。为了比较,顺便说一下break语句。break语句,既可以跳出循环体,也可以跳出swicth()体。请比较continue和break语句的异同。
c语言中for语句的使用方法?
for(第一条语句;第二条语句;第三条语句)
{
要循环的语句;
}
第一条语句是第一次循环前要执行的语句。
第二条是判断for循环结束的语句。
第三条是第次循环最后都要执行的语句
如 for(i=1;i8;i++){ printf("%d\n",i);}
相当于
i=1;第一条语句
while(i8)第二条语句
{
printf("%d\n",i);要循环的语句
i++;第三条语句
}
或相当于
i=1;
for(;i8;)
{
printf("%d\n",i);
i=i+1;
}
注:for(;0;)就不循环了!因为C中0代表假!
同理
int a=3;
for(;a==3;);就无限循环
c语言中 go to语句的使用方法
go to 是转向语句,按其英文含义就可理解 用法 标号: 语句;
go to 标号;
或者 go to 标号;
标号: 语句; 标号和goto必须包括处于同一个函数内 标号的写法跟变量名一样不能和关键词相同,后面必须带冒号
当程序执行到go to这个语句时,程序就转跳到标号后面的语句去了
例
int x=1;
语句1:
x=x+1;
if(x100)
goto 语句2;
cout"x=100"endl;
当x小于100,执行if 后面的goto语句,于是转跳到语句2处执行语句1后面的语句x=x+1,接着if语句,
如此反复。。。。。。,直到x=100 if语句括号表达式为假不执行后面的goto语句,
于是跳过执行cout语句输出x=100这几个字符
C语言中BOOL命令的使用方法
一般来说 bool 作为boolean类型来使用,不是命令,是一种类型,表示真/假。
C语言里面没有bool(布尔)类型
C++里面才引入bool类型
C语言里面用数值0表示假,非0整数表示真(一般是1)
C语言中bool类型可以自定义:
#define bool int
#define false 0
#define true 1
C语言中malloc函数的使用方法
用于申请空间,调用格式,
(指针所指对象的数据类型*)malloc(sizeof(指针所指对象的数据类型)*个数)
(分配类型 *)malloc(分配元素个数 *sizeof(分配类型))
如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回0
#include "文件" 将文件包含进来.要包含多条文件要使用多次.
比如:#include "stdio.h"
调用自己的程序模块要给出目录路径名,即指明盘驱动器名和一系列的子目录名.比如:#include "d:\User\test\menu.h"