在keil中,宏定义是一个重要内容。无参数的宏作为常量,而带参数的宏则可以提供比函数更高的调用效率。但预处理只是进行简单的文本代替,而不做语法检查,所以会存在一些问题。

例如:#define BUFSIZE 100

这里的BUFSIZE只是一个名字,并不占用存储空间并且能被放在一个头文件中。在编译期间编译器将用字符串“100”来代替所有的BUFSIZE。这种简单的置换常常会隐藏一些很难发现的错误,并且这种方法还存在类型问题。比如这个BUFSIZE究竟是整数还是浮点数?而使用const,则把值带入编译过程即可以解决这些问题,和上面宏定义等效的语句如下:

const    int    BUFSIZE=100;

这样就可以在任何编译器需要知道这个值的地方使用BUFSIZE,并且编译器在编译过程中可以通过必要的计算把一个复杂的常量表达式缩减成简单的,这在定义数组时尤其突出。

用关键字const修饰的标识符是一类特殊的常量,称为符号常量,或称之为const变量。const修饰符的使用也很简单。事实上,对基本数据类型的变量,一旦加上const修饰符,编译器就将其视为一个常量,不再为他分配内存,并且每当在程序遇到它时,都用在说明时给出的初始值取代它。

因为被const修饰的变量的值在程序过程中不能被改变,所以在声明符号常量时,必须对符号常量进行初始化,除非这个变量使用extern修饰的外部变量。

const    int    i=8;

const    int    d;                        //错误

extern    const    int    d;            // 正确

Keil 中的预处理命令const相关推荐

  1. 预处理命令不是c语言本身的组成部分,C中的预处理命令

    C中的预处理命令是由ANSIC统一规定的,但它不是C语言的本身组成部分,不能直接对它们进行编译,因为编译程序无法识别它们.必须对程序进行通常的编译(包括词法和语法分析,代码生成,优化等)之前,先对程序 ...

  2. C语言中 编译预处理命令的作用有哪些,C语言系列——预处理命令

    是什么? 首先介绍一下什么是预处理,在编译之前对源文件进行简单加工的过程,就称之为预处理.又因为预处理主要是处理#开头的命令,故将以#号开头的命令称为预处理命令. 做什么? 今天我们主要讨论C语言中的 ...

  3. C语言中编译预处理命令作用,C语言预处理命令详解

    原标题:C语言预处理命令详解 关注百问科技并将它设为星标 不错过任何一篇嵌入式干货 ------ 作者:clover_toeic 原文出处: https://www.cnblogs.com/clove ...

  4. c语言用define预处理命令定义,C语言程序设计第八章预处理命令..doc

    一.?选择题1.?对宏命令的处理是_ ___A.?在程序执行时进行的B.?在对程序中其他语句进行编译前进行的C.?在程序连接时进行的D.?与程序中其他语句同时进行编译2.?下面对编译预处理的叙述正确的 ...

  5. c语言里有js的预编译环节吗,C语言第十一讲,预处理命令.

    C语言第十一讲,预处理命令. 一丶预处理简介 什么是预处理,预处理就是预先处理. 我们知道,程序会经过编译,连接形成可执行文件 这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理.提前 ...

  6. c语言输入输出预处理命令,C语言第十一讲,预处理命令.

    C语言第十一讲,预处理命令. 一丶预处理简介 什么是预处理,预处理就是预先处理. 我们知道,程序会经过编译,连接形成可执行文件 这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理.提前 ...

  7. #if...#endif是C++中的条件编译预处理命令

    #if...#endif是C++中的条件编译预处理命令 有两种格式: 1:#ifdef  标示符 程序段1 #else 程序段2 #endif 表示:如果标示符已经被#define命令定义过,则编译程 ...

  8. c语言中预处理都有哪些类型,c语言中预处理命令都有哪些

    匿名用户 1级 2017-12-21 回答 我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境.现把常用的预处理命令总结如下: 1. 预处理程序 按照 ...

  9. R 多变量数据预处理_超长文详解:C语言预处理命令

    一  前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置. 预处理是C语言的一个重要功能 ...

最新文章

  1. 支付宝蚂蚁森林合种树,2-4天领证,1/2号车满员,3号车成立
  2. 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?...
  3. windows的定时任务设置
  4. mysql安装完成后登入错误
  5. Spring Boot JPA的查询语句
  6. ElementUI dialog嵌套蒙层遮挡问题
  7. .net core 5 IIS Api网站部署需要注意
  8. Vision Transformer 论文解读
  9. 设计模式学习笔记——抽象工厂(Abstract Factory)模式
  10. Poj 1338 Ugly Numbers(数学推导)
  11. ModelSim之命令行仿真入门
  12. 上海理工大学HVAC综合实验室(图)
  13. 通过银行卡号查询银行卡类型接口
  14. markdown数学公式(MathJax)
  15. MySQL 详细安装(亲测)
  16. 爆款短视频速成技巧之视频发布篇,短视频介绍文案怎么写(下)
  17. ORB-SLAM2从理论到代码实现(十二):Frame类
  18. 《金蝶ERP-K/3完全使用详解》——6.3 系 统 设 置
  19. 公众号视频化|公众号如何添加视频内容
  20. 高准艾默生质量流量计的相关流体特性

热门文章

  1. mysql索引学习笔记
  2. 新的log4j2.xml
  3. 利用shell和iptables实现自动拒绝恶意试探连接SSH服务
  4. 内部排序算法系列---快速排序
  5. SRM 212 Div II Level One: YahtzeeScore
  6. 专业上需要加强的地方
  7. oracle 10g SQL* Plus主机字符串
  8. Fedora Linux中配置JDK5或JDK6环境变量
  9. Windows Phone 7 定义和使用字典资源(ResourceDictionary)
  10. 摄像机旋转约束问题及解决