C语言部分(2)
3. const与#define区别
a) #define宏在预处理阶段展开
const 关键字是在编译运行阶段使用
注:C源程序->编译预处理->编译(->优化程序->汇编程序)->链接程序->可执行文件
b) #define只是在预处理时展开,而const可能会分配内存
注:const常量是否占据存储空间取决于是否有引用该常量地址的代码。参考博客:
http://blog.csdn.net/hippig/article/details/7829120
看下面一段代码,大家感受下什么是预处理阶段展开:
<span style="white-space:pre"> </span>#include <stdio.h>
<span style="white-space:pre"> </span>#define I void
<span style="white-space:pre"> </span>#define LOVE main(){
<span style="white-space:pre"> </span>#define CODING printf(“I LOVE CODING\n”);}
(程序在gcc 下编译通过)
c) const 不要简单理解为常量,应当理解为 read only(《c 专家编程》)
感觉这篇博客不错:http://blog.csdn.net/jamestaosh/article/details/4348726
d) define 常见题目:
<span style="white-space:pre"> </span>#defineF(X) X+X
int a = 3;
int b = F(a)*F(a);
printf(“%d\n”,b);