我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论。

(1)全局变量:如果程序中定义了全局变量,而且初始值不是0。此时,在程序调到main()函数执行前,除了要进行内存清零、初始化堆栈外,还需要将全局变量的初始值加载到内存的指定区域(编译过程中为全局变量分配的空间)。

(2)局部变量:局部变量通常使用那些缓冲内存(用作保存运算过程的中间数据)。初始化的局部变量,通常程序中都会对用到的缓冲内存重新赋值。

但是,对于没有初始化的局部变量需要注意“无知情的情况下被赋了值”。下边的子函数中定义了变量,但是并未初始化。按照标准C语言的准则,未初始化的变量的初值默认是0,但是KEIL对未初始化的局部变量的处理不是这样的。

void function()

{

unsigned char k,j;

if(k

else{

}

}

实际的编译后的反汇编程序看不到对这些局部变量的初始化。这些局部变量可能会占据那些还未被使用的内存或者其他子函数中局部变量已经释放的空间(但是这些空间可能并没有清零)。倘若是后者,其他函数局部变量释放的空间由于并没有清零,所以这些局部变量就一开始被赋了不能预先知道的值,这是不希望看到的。所以如果使用一个局部变量,就给这个变量赋个初值。

(3)谨防程序在“无知情的情况下被优化”。如下函数的内容经过keil的编译后,就变成了“REI”。也就是说function的内容全被忽略掉。解释:keil对程序进行了优化,由于function的内容并没有任何作用,所以优化时就把这些内容忽略掉。倘若在变量前边加上volatile”,这部分内容就不会被忽略。

void function()

{

unsigned char i,j,k;

i=j+k;

}

总结如收功  练功不收功 到老一场空

C语言编译器

我们分两部分介绍C语言的编译器,分别是桌面操作系统和嵌入式操作系统. 桌面操作系统 对于当前主流桌面操作系统而言,可使用 Visual C++.GCC 以及 LLVM Clang 这三大编译器. Vi ...

第一个C语言编译器是怎样编写的?

首先向C语言之父Dennis MacAlistair Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于J ...

【转】自己动手写SC语言编译器

自序 编译原理与技术的一整套理论在整个计算机科学领域占有相当重要的地位,学习它对程序设计人员有很大的帮助.我们考究历史会发现那些人人称颂的程序设 计大师都是编译领域的高手,像写出BASIC语言的BIL ...

在线C语言编译器/解释器

在线C语言编译器/解释器 本文介绍两个C语言在线解释器/编译器,这些工具可以提高代码片段检测方便的工作效率,并可以保证这些代码的正确性,而且还可以和别人一起编辑/分享之间的代码,这样可以共同分析代码并 ...

简单的C语言编译器--概述

在学习了编译原理的相关知识后,逐渐的掌握一个编译器的结构.作用和实现方法.同时,希望自己在不断的努力下写出一个简单的C语言编译器. 实现步骤 词法分析器:将C语言测试代码分解成一个一个的词法单元: ...

windows系统安装gcc编译器----c/c++语言编译器

1.安装MinGW编译管理安装软件 官方下载:https://osdn.net/projects/mingw/releases/ 作者百度云备份下载:https://pan.baidu.com/s/1 ...

C语言编译器CL.exe

下载地址CL.7z版权问题:仅供学习交流,请于24小时内删除,本人不承担版权问题… 基本使用: 1.解压缩,例如解压缩到E盘根目录下 2.打开cmd命令行界面(快捷方式win+R输入cmd回车)cd命 ...

C语言编译器不检查数组下标越界

这两天被人问了一个问题说假如C/C++访问下表越界的数组元素会报错么,于是充满好奇心的我动手试了一下,WTF,果然没有报错,但是会给程序带来莫名其妙的结果(比如十次的循环但是变成了死循环,但八次却可以 ...

C语言编译器和IDE的选择

什么是编译器: CPU只认识几百个二进制形式的指令,C语言对CPU而言简直就是天书.C语言是用固定的词汇与格式组织起来,简单直观,程序员容易识别和理解. 这时候就需要一个工具,将C语言代码转换成CPU ...

随机推荐

ads

(3) Make可以编译整个工程,并生成映像文件.在ADS中,ARM提供了三种映像文件,      1. Debug:      使用本生成目标生成的映像文件中包含了所有的调试信息,用于开发过程中使用 ...

C# 探索c#之Async、Await剖析

探索c#之Async.Await剖析 作者:蘑菇先生 出处:http://mushroom.cnblogs.com/

HDU 4893 Wow! Such Sequence!(2014 Multi-University Training Contest 3)

题意: 有三种操作: 1 x y: 表示给x位置加上y 2 x y:查询[x,y]的区间和 3 x y:将 [x,y] 区间上的数变为最接近的 Fibonacci. 思路: 1 操作按正常单调更新,区 ...

python 自动化之路 day 04

内容目录: 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 4.嵌套函数 5.递归 6.匿名函数 7.函数式编程介绍 8.高阶函数 9.内置函数 1.函数基本语法及特性 背景提要 现在老 ...

Nodejs 上传下载功能的实现(同步)

上传和下载可分为两种,一种是form表单的形式(同步),另一种是Ajax的形式(异步). 示例一(form表单): html代码如下:

C#调用Java方法

C#调用Java方法(详细实例) 阅读目录 C#调用c++ C#调用JAVA方法 C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具 ...

Oracle表连接总结

1 简述 1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结 ...

SQL - 2.基础语法

一.SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GR ...

Linux系统运维故障排查

一.思路 1.处理问题要求 2.一般思路 二.具体问题 1.网络问题 (1)网络不通 (2)网络很慢 2.硬件问题 3.操作系统问题 (1)系统无法正常启动 (2)系统运行慢或死机 4.服务或程序问题 ...

Android -- 在xml文件中定义drawable数组

Xml @drawable/image1

keil c语言编译运行,Keil的c语言编译器相关推荐

  1. c语言如何编译及调试,中如何编译运行及调试C语言程序.doc

    中如何编译运行及调试C语言程序 VC++6.0中如何编译运行调试C语言程序 1.启动VC++6.0 (如下图) 2.单个源文件的编译运行 例如下面的源代码 #include void main() { ...

  2. vc60如何输入c语言,vc60中如何编译运行及调试c语言程序.pdf

    VC++6.0中如何编译运行调试 C语言程序 1. 启动VC++6.0 (如下图) 2. 单个源文件的编译运行 例如下面的源代码 #include void main() { int i,sum=0; ...

  3. c语言vi运行编译文件,VC++6.0中如何编译运行及调试C语言程序文件.docx

    VC++6. 0中如何编译运行调试C语言程序 1?启动VC++6. 0 (如下图) [5>R?*16 00 P"! tptl tub go□賦星糸理技件□中出融Fz " 口仍 ...

  4. c语言打程序时会遇到什么问题,Sublime text3 实现C语言编译运行以及过程中可能遇到的问题...

    以前学C语言的时候主要用的编译器是cb,后来知道sublime text3配置之后可以编译运行C语言,在写简单程序的时候用起来就方便多了. 首先需要准备MinGW.sublime text3的安装包, ...

  5. c语言编译的手机软件,C语言编译工具

    软件介绍 C语言编译工具app是一款功能十分强大的手机编译.更换代码的软件工具,C语言编译工具app可以快速进行代码翻译.代码查找.替换等,它支持多种代码语言,欢迎下载! C语言编译工具app内容 简 ...

  6. stm单片机c语言编译,单片机开发之C语言编程基本规范

    为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范.本标准规定了程序设计人员进行程序设计时必须遵循的规范.本规范主要针对单片机编程语言和08编译器而言,包括排版.注释.命名.变量 ...

  7. c语言编译为机器语言过程,C语言编译全过程

    C语言编译全过程 编译的概念 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成 ...

  8. c语言编译常见错误提示,c语言编译常见错误

    c语言编译常见错误 (2012-04-17 21:33:53) 标签: 杂谈 分类: 计算机 1."c" not an argument in function sum 该标识符不 ...

  9. visual c语言编译运行结果,Visual Studio 2015编译运行C语言文件问题小结

    各位老友很久不见,距离上一篇博客已通过去四个多月了,这应该是近几年间隔最长的一次.很无奈,毕业季遇上了特殊时期,不少计划都被打乱了,半年前构思的各类场景在现实面前一一被抹杀,在家搞毕业设计是真的痛苦, ...

最新文章

  1. Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson
  2. opencv对图像是软解码_C ++ OpenCV解码缓慢
  3. 51nod1297 管理二叉树
  4. 华为鸿蒙是物联网操作系统;字节跳动的飞聊被 App Store 下架;FFmpeg 作者编写 JS 引擎 | 极客头条...
  5. 居中的最佳方法 div 在垂直和水平页面上? [重复]
  6. JS页面打开方式丶对话框及页面跳转方式
  7. 轻量级DI框架Guice使用详解
  8. 易语言斗鱼弹幕助手源码
  9. Android日常开发问题总结:这些问题火候不够,随时变成删库跑路!
  10. UG二次开发GRIP移动到图层
  11. 大数据——Flume组件Source、Channel和Sink具体使用
  12. 数学建模16(阻滞增长模型、BP神经网络)
  13. python安装教程(配置环境变量)
  14. harbor安装时出现ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug in
  15. rust: 引用第三方库(Cargo.toml、Cargo.lock文件)
  16. K8S系列(六)DaemonSet详解
  17. 数码照片处理实例:用Photoshop处理照片的背景
  18. 使用Octomap生成二维占据栅格导航地图
  19. openjudge开餐馆
  20. MPI-Avoid deadlock

热门文章

  1. 前端转安卓开发!作为一名程序员我不忘初心,进阶学习资料!
  2. 基于Android重力传感器的编程——摇一摇打电话+旋转锁屏功能的实现
  3. 2022年自考专业考试(英语)英语词汇学练习题
  4. 操作系统练习题(第二章)
  5. 数字支付中的5G技术:未来会有哪些新的变化
  6. 服务器的信号来源来自哪里,人类曾多次发现地外信号,到底来自哪里?
  7. vue仿淘宝购物车的实现
  8. 一次失败的网购:在兰蔻官网订购的货不对版
  9. 推荐一款超实用的免费照片编辑软件给大家!
  10. 网络推广计划浅谈新站在前期收录少的原因及解决方法!