1.数值宏常量

    #define宏定义是个演技非常高超的替身演员,但也会耍大牌的,所以我们使用它要慎之又慎。它可以出现在代码的任何地方,从本行宏定义开始,以后的代码都认识宏了;也可以把任何东西都定义成宏。因为编译器会在预编译的时候用真身替换替身,所以在我们的代码里可以常常用替身来帮忙。
    #define  PI     3.1415926
   在此后的代码中,你尽可能的使用PI来代替3.1415926,而且最好就这么做。不然的话,如果我们精度再提高一点怎么办?如果用PI的话,我们就只需要修改一次。这种情况不是最要命的,我们看下面情况:
    #define ERROR_POWEROFF -1
 如果你的代码里不用ERROR_POWEROFF这宏而用-1,估计在函数返回错误代码的时候(往往开发一个系统需要定义很多错误代码)。恐怕上帝都不知道-1表示什么意思吧。这个-1,我们称为魔鬼数,上帝碰到它也会发狂的。所以,代码里一定不要出现魔鬼数。
    const修饰的数据是有类型的,而define宏定义的数据没有类型。为了安全,建议以后定义一些宏常量时用const代替,编译器会给const修饰的只读变量做类型校验,减少错误的可能。但要注意,const修饰的不是常量而是readonly 的变量,const修饰的只读变量不能用来作为定义数组的维数,也不能放在case后面。
 
2.字符串宏常量
   #define ENG_PATH     E:\English\listen_to_this\listen_to_this_3
 
3.用宏定义表达式
   #define   SQR  ((x)*(x))
   注意,最外层的括号不要省
 
4 #undef
   #undef是用来撤销宏定义的。
    #define  PI     3.1415926
   .......
    //code 
   #undef
 也就是说宏的生命周期是从#define开始到#undef结束的。

C语言深度剖析---预处理(define)(转载)的更多相关文章

  1. C语言深度剖析--volatile(转载)

    volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统,硬件或者其他线程等等.遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进 ...

  2. 读书笔记之:C语言深度剖析

    读书笔记之:C语言深度剖析 <C 语言深度解剖>这本书是一本“解开程序员面试笔试的秘密”的好书.作者陈正冲老师提出“以含金量勇敢挑战国内外同类书籍”,确实,这本书中的知识点都是一些在面试中 ...

  3. C语言深度剖析---const关键字(转载)

    const是constant的缩写,是恒定不变的意思.被const修饰的值,是只读变量. 1.const修饰只读变量,具有不变性      #include <stdio.h> int m ...

  4. 《C语言深度剖析》学习笔记----C语言中的符号

    本节主要讲C语言中的各种符号,包括注释符.单引号双信号以及逻辑运算符等. 一.注释符 注释符号和注释在程序的预编译期就已经被解决了,在预编译期间,编译器会将注释符号和注释符号之间的部分简单的替换成为空 ...

  5. C语言深度剖析-笔记

    关键字: C语言关键字32个: 关键字                                         意 义 auto                           声明自动变 ...

  6. 指针与数组的区别 —— 《C语言深度剖析》读书心得

    原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). ...

  7. C语言深度剖析-----内存管理的艺术

    动态内存分配 为什么使用动态内存分配 例:记录卖出的商品 卖出商品最多只能记录1000个 两种改进的方法 都需要动态内存分配 第二种方法需要重置内存 calloc和realloc realloc重置内 ...

  8. C语言深度剖析-----函数

    认清函数的真面目 函数的意义 面向过程的程序设计 函数声明和定义 函数参数 编写代码的时候,不要编写类似先后调用的代码 f(k,k++) C语言中的顺序点 a--&&a  ,& ...

  9. C语言深度剖析学习错误点记录

    0. static修饰变量和函数 static修饰变量,1)限定作用域,本文件内.全局变量(自定义起,本文件前面要用需extern声明),局部变量函数内:2)生命周期,程序运行期间一直保存. stat ...

随机推荐

  1. 简明的例子讲解position:relative、float、overflow:hidden和inline-block

    标签(空格分隔): css relative float 我们通过一个简单的实验来了解position:relative float overflow:hidden 和 inline-block. 下 ...

  2. 细说SSO单点登录(转)

    什么是SSO? 如果你已知道,请略过本节! SSO核心意义就一句话:一处登录,处处登录:一处注销,处处注销.即:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 很多人容易把SS ...

  3. php 前台数据显示

    <pre name="code" class="html"> public function show(){ echo "访问了index ...

  4. perl5 第九章 关联数组/哈希表

    第九章 关联数组/哈希表 by flamephoenix 一.数组变量的限制二.定义三.访问关联数组的元素四.增加元素五.创建关联数组六.从数组变量复制到关联数组七.元素的增删八.列出数组的索引和值九 ...

  5. perl5 第五章 文件读写

    第五章 文件读写 by flamephoenix 一.打开.关闭文件二.读文件三.写文件四.判断文件状态五.命令行参数六.打开管道 一.打开.关闭文件   语法为open (filevar, file ...

  6. Dream

    即使下着雨,天空依旧明亮,因为远方有我的梦想.   ——forever97

  7. UVAlive 2326 Moving Tables(贪心 + 区间问题)

    The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in ...

  8. js数组练习

    //查找数组对象中 age 大于 18 对象 function filterAdult(arr) { return arr.filter(function(item, index, array) { ...

  9. Sass入门——简介+语法格式及编译调试

    本文来自慕课网大漠. Sass简介 Sass和SCSS区别 1.后缀名不同,很好理解 2.Sass以严格的缩进语法规则书写,不带大括号和分号:而SCSS的语法规则和CSS的语法很类似. Sass: $ ...

  10. 【JAVA】修改项目包名

    从最后一层开始修改,一步步往上递增修改.