C语言程序调试原理,C程序运行原理

  • Post author:
  • Post category:其他


从接触到C语言至今三年有余了,今天我想把我对这门语言的了解,感想以及自己对编程的一些看法都写出来,算是做一个回顾总结,也可以让志同道合的朋友们借鉴一下​

何为编程,在我看来,编程并不是一个非常神秘的事情,如果要我给编程定义,那么就是通过某种机制以实现人与计算机的交互的目的​

说说C语言吧,它同样通过某种机制实现了人与计算机的交互。当然,每一种机制的实现所借用的工具是不一样,使用C语言如果想要方便的完成与计算机的交互,我们需要在操作系统上安装C编译器集成环境,(比如VC,VS等)下文我会详细说明是如何交互的.我想大部分人的编程之路都是从C语言开始的,依然清楚的记得我的第一个程序​

打开编译器,新建一个.c文件或者一个项目,书写如下代码,运行,奇迹出现

#include​​

int main()​

{ ​

printf(“hello world”);

}​​

printf(“你要说的话”);这样输出的是一串话,你在引号里写的任何东西都会被原封不动的打印出来

代码其余的部分我们暂且不管,那么目前我们已经可以在命令提示框里输出任何我们写的东西了,走到这里,已经完成了编程之路的第一步,​

那么我们看看如上代码是如何实现交互的。​

我们只是写了代码,点击了运行,然后出现了我们想要的结果,这中间发生了什么!

计算机CPU只认识二进制代码(1和0),我们的高级语言是如何一步步转变为二进制代码的?下面我将详细讲述这中间的过程(详细内容可参阅《程序员的自我修养》)

第一步,任何程序的运行都要首先进入内存!而你保存的.c文件时存放在磁盘中的,所以如果你要执行的代码不在内存中,编译器首先会把代码扫描进入内存

第二步,进行预编译,把你用#include包含的头文件还有宏定义替换成相对应的代码。一些繁琐的底层代码我们不需要每次都亲自编写,如果输出一个hello

world需要我们一百行代码,那么会给我们的编程带来极大的阻碍,所以头文件可以让我们的编程尽可能简单,我们需要做的是更多的是逻辑的想法,而不是枯燥无味的写代码,头文件为我们提供了很多便利,让我们不用纠结细节,输出一句话我们只需要printf();细节都包含在了#include中,我们每次涉及到要输出时,只要加上这个头文件,就可以用printf();输出想要的东西了​

第三步,进行编译,编译时会对你的代码进行词法分析,语法分析,如果出错了,就会给你相应提示,当然,编译器只能检测出语法上的错误,逻辑上的错误时不会被发现的,如果没有错误了,这个时候编译器就会拿着我们的代码做进一步处理​

第四步,进行汇编,前面我们的代码进过编译器检测已经没有语法错误了,也就是说编译器有能力将此时的代码翻译成计算机可以理解的二进制代码。汇编过程就像是一个翻译把你的话翻译成外国人听。走到这里我们的代码也就变成了汇编语言,汇编语言与机器语言是一一对应的,所以通过一张对照表,我们的汇编代码非常容易的就变成了二进制代码.​

第五步,链接,如果我们的.c文件只有一个的话这步是不会出现的,但是在多文件中,要把多个文件有机的结合起来,就必须链接,组成一个完整的整体​生成.exe文件

第六步,运行,这个时候把我们的二进制代码交给CPU,CPU就可以运行出结果了​

我会在后期陆续为大家推出C语言,C++方面的感悟还要Linux的知识,网站的建设,安卓软件的开发等