当前位置: 首页 > news >正文

大学生创业服务网站建设方案陕西住房城乡建设网站

大学生创业服务网站建设方案,陕西住房城乡建设网站,直播代运营公司,邮箱购买1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境#xff0c;一是翻译环境#xff0c;二是运行环境#xff0c;计算机能识别的是二进制的指令#xff0c;人写完代码后通过翻译环境#xff0c;使代码变成计算机能读懂的可执行的机器指令一是翻译环境二是运行环境计算机能识别的是二进制的指令人写完代码后通过翻译环境使代码变成计算机能读懂的可执行的机器指令运行环境就是用来执行实际的代码操作的环境。 1翻译环境 那么翻译环境如何让源代码变成可执行的机器指令的呢 翻译环境包含的是编译和链接两大过程其中编译包含预处理也可以叫做预编译编译汇编。 编译的时候机器通过编译器使.c文件生成.obj文件.obj文件是目标文件在windows是.obj为后缀Linux环境下是.o为后缀多个目标文件在经过链接库的处理最后生成 .exe文件 VS2022用到的编译器是cl.exe 用到的链接器是link.exe 编译的整个过程如下Linux下的gcc编译器为例 .c文件 .h文件 源文件 经过预处理 生成.i为后缀的文件  -  经过编译生成.s为后缀的文件 - 经过汇编生成.o为后缀的文件 - 经过链接器和链接库生成最后的可执行文件.exe 预处理 在gcc环境下我们使用指令 gcc -E test.c -o test.i 使机器生成.i为后缀的文件的时候我们就会发现代码出现了一下改变这里因为在预处理阶段存在以下规则 1 删除所有的#define所有宏定义被展开 2 处理所有的条件编译指令如#endif #if #else 3 处理#include预编译指令将头文件里面包含的内容插入到头文件所在的位置这个过程是递归进行的不排除头文件里面包含其他头文件的可能性 4 所有的注释都会被删除 5 或保留#pragma指令编译器后续会使用为了防止头文件重复包含 6 添加行号和文件名标识方便编译器后续生成调试信息 当我们不知道宏定义是否包含正确的时候就可以经预处理之后的.i文件进行确认。 编译 在gcc环境下我们使用指令 gcc -S test.i -o test.s 使机器生成了.s为后缀的文件在这个阶段编译器会进行三个操作词法分析语法分析语义分析及优化。 array[index] (index4)*(26); 假定以上代码 词法分析 词法分析就是把代码中的字符分隔开分割成一系列的记号如关键字标识符特殊字符字面常量如下 语法分析 通过词法分析产生的记号语法分析器通过记号生成语法树以表达式为结点的树如下 语义分析 语义分析器会从表达式的层面分析能做的分析使语义的静态分析静态语义分析包括通常包括声明和类型的匹配类型的转化等这个阶段会显示错误的语法信息。 汇编 汇编的指令如下 gcc -c test.s -o test.o 汇编器将汇编代码变成机器可以执行的指令每一个汇编语句几乎都对应一个机器指令而汇编语言较难的一个原因就是不同的机器的汇编语言是不一样的不具有跨平台性。 链接 链接是一个复杂的过程需要将一堆文件链接在一起才能生成可执行程序。 链接包括分配地址分配空间符号决议重定位等步骤。 链接解决的是一个项目中多文件多模块互相调用的问题比如一个C语言的项目中有两个.c文件test.c add.c extern int Add(int, int);//声明外部函数 extern int g_val;//声明外部全局变量 int main() {int a 10, b 20;int sum Add(a, b);printf(%d , sum);printf(g_val %d , g_val);return 0; } int g_val 2024; int Add(int x,int y) {return x y; } test.c 经过编译器处理生成了test.o文件Add.c经过编译器处理生成了Add.o文件通过关键字extern我们在test.c文件里面使用了函数Add 和 全局变量g_val但是每一次使用这两个外部符号的时候必须确切的知道Add g_val的地址因为编译器是单独编译的所以编译器编译test.c文件的时候并不知道函数Add g_val的存在所以暂时调用Add的指令的目标地址和g_val的地址搁置等最后链接的时候根据引用的符号Add在其他模块寻找Add函数的地址最后修正test.c文件里面引用到的Add的地方使目标地址成为真正的函数Add的地址对于全局变量亦是如此这个修正的过程叫做重定义。 2运行环境 运行环境就没什么好介绍的了 程序运行的时候必须载入到内存里面在有操作系统的环境下一般都是由操作系统完成独立的环境下程序的载入必须通过手工安排。因为程序运行的时候操作系统会为程序开辟函数栈帧调用堆栈所以载入内存是必须的。 最后就是终止程序了可能是main函数顺利读取到了最后一行也可能是意外终止比如按下F11的时候调试到一般关闭程序这时候程序就会显示返回值是-1也就是意外终止了。 感谢阅读
http://www.dnsts.com.cn/news/72710.html

相关文章:

  • 天津免费建设网站代挂QQ建设网站
  • 网站谷歌地图提交自己可以做微信小程序吗
  • 个人网站可以直接做微信登陆吗chrome浏览器官网入口
  • 松岗做网站哪家便宜南阳网站运营
  • app网页设计网站wordpress+百度云图安装
  • 福田网站优化互联网产品经理
  • 做十个网站怎样查看别人的网站是怎么建设
  • 建设历史文化旅游宣传网站做微商哪个网站比较好
  • 网站制作器提高百度快速排名
  • 伊川网站开发濮阳网警
  • wordpress视频网站采集器seo优化排名百度教程
  • 电子科技网站建设网站开发教材
  • 互动网站建设公司在线培训系统平台
  • 网站建设致谢湖州市建设工程造价信息网
  • 建设银行新加坡招聘网站做电影网站的服务器需要多大
  • 一个网站需要几个人做阿里云服务器建网站
  • 快速建站系统如何利用dw建设网站
  • 最新网站技术商业空间设计调研
  • 做企业网站服务商手机端网站优化排名seo推广
  • 网络组建考试题全网seo是什么意思
  • 做游戏人设计网站找网络公司建网站每年收维护费
  • 哈尔滨建设厅官方网站徐州做网站企业
  • 企业建站有哪些步骤网站加速器免费永久
  • 宁波网站建设宁波表情包做旧网站
  • 网站速度打开慢的原因近期国外重大新闻事件
  • 如何做一个网站推广自己的产品忘记密码wordpress
  • 网站备案主体域名购物网商城首页
  • 医疗网站建设免费网站ip域名查询
  • 网站开发证有没有用提交百度收录
  • 白云区做网站公司郑州最新情况