#define的总结与比较~~替换原则
2009-11-21 22:12
281 查看
最近用define的时候有时候会用错,这里我再提一下define...
可能有些人还不清楚define也就是宏定义 。概念东西自己百度下吧
我讲讲用法
#define size 100
size 就相当于了100 这个和变量不同 size不是变量而是常数相当于
数组定义 int a[size]; 这里可以写上size 为什么呢? 不是定义时候不能是变量吗?
嘿,刚才不是已经说了吗? size不是变量嘛,会上去看看,你就知道了。
现在主要讲的不是define的这个问题是表达式替换的问题。要深刻理解 #define size 100
int main()
{
int a[size];
}
这个程序里运行时候 是把size 用100来替换了
不像变量 是放到一个存储空间里 所以说宏定义节省一定空间。
----------
进入正题了,我们写一个求一个数的绝对值一般都这样写:
int abs(int x)
{
if(x<0)
return -x;
else
return x;
}
函数写法。
那么我们怎么用define实现同样的目的呢?
#define abs(x) x<0?-x:x (?:三元运算符这个 知道吧,不知道翻书)
记住宏定义是替换。
#include
#define abs(x) x<0?-x:x
int main()
{
int a=-5,b=-9,c;
c=a+b;
printf("%d/n",abs(c));
return 0;
}
看这个程序运行结果是多少?
是14吧。嗯对没错。
---
#include
int abs(int x)
{
if(x<0)
return -x;
else
return x;
}
int main()
{
int a=-5,b=-9,c;
c=a+b;
printf("%d/n",abs(c));
return 0;
}
答案也是14 效果一样的两个。
但是,,,,大家看好:
#include
#define abs(x) x<0?-x:x
int main()
{
int a=-5,b=-9,c;
/*c=a+b;*/ printf("%d/n",abs(a+b));
return 0;
}
这会答案是14?? 不是绝对不是 那是多少??先不说 我们来分析下。。。。。
#include
#define abs(x) x<0?-x:x
int main()
{
int a=-5,b=-9,c;
printf("%d/n",abs(a+b));
return 0;
}
define替换,记住这个去分析。x被替换成a+b 然后就是a+b<0?-a+b:a+b
-5+-9<0?--5+-9:-5+-9
意思是说-5加-9小于0就--5加-9 那么答案是-4 明白了吧
;;;;
#include
int abs(int x)
{
if(x<0)
return -x;
else
return x;
}
int main()
{
int a=-5,b=-9,c;
/*c=a+b;*/
printf("%d/n",abs(a+b));
return 0;
}
这个函数写的答案呢?当然还是14喽 ,为什么 因为他不是替换形式的 把a+b后的值传到函数判断然后返回。
大家要多思考,多总结,多笔记,养成良好的习惯~~
可能有些人还不清楚define也就是宏定义 。概念东西自己百度下吧
我讲讲用法
#define size 100
size 就相当于了100 这个和变量不同 size不是变量而是常数相当于
数组定义 int a[size]; 这里可以写上size 为什么呢? 不是定义时候不能是变量吗?
嘿,刚才不是已经说了吗? size不是变量嘛,会上去看看,你就知道了。
现在主要讲的不是define的这个问题是表达式替换的问题。要深刻理解 #define size 100
int main()
{
int a[size];
}
这个程序里运行时候 是把size 用100来替换了
不像变量 是放到一个存储空间里 所以说宏定义节省一定空间。
----------
进入正题了,我们写一个求一个数的绝对值一般都这样写:
int abs(int x)
{
if(x<0)
return -x;
else
return x;
}
函数写法。
那么我们怎么用define实现同样的目的呢?
#define abs(x) x<0?-x:x (?:三元运算符这个 知道吧,不知道翻书)
记住宏定义是替换。
#include
#define abs(x) x<0?-x:x
int main()
{
int a=-5,b=-9,c;
c=a+b;
printf("%d/n",abs(c));
return 0;
}
看这个程序运行结果是多少?
是14吧。嗯对没错。
---
#include
int abs(int x)
{
if(x<0)
return -x;
else
return x;
}
int main()
{
int a=-5,b=-9,c;
c=a+b;
printf("%d/n",abs(c));
return 0;
}
答案也是14 效果一样的两个。
但是,,,,大家看好:
#include
#define abs(x) x<0?-x:x
int main()
{
int a=-5,b=-9,c;
/*c=a+b;*/ printf("%d/n",abs(a+b));
return 0;
}
这会答案是14?? 不是绝对不是 那是多少??先不说 我们来分析下。。。。。
#include
#define abs(x) x<0?-x:x
int main()
{
int a=-5,b=-9,c;
printf("%d/n",abs(a+b));
return 0;
}
define替换,记住这个去分析。x被替换成a+b 然后就是a+b<0?-a+b:a+b
-5+-9<0?--5+-9:-5+-9
意思是说-5加-9小于0就--5加-9 那么答案是-4 明白了吧
;;;;
#include
int abs(int x)
{
if(x<0)
return -x;
else
return x;
}
int main()
{
int a=-5,b=-9,c;
/*c=a+b;*/
printf("%d/n",abs(a+b));
return 0;
}
这个函数写的答案呢?当然还是14喽 ,为什么 因为他不是替换形式的 把a+b后的值传到函数判断然后返回。
大家要多思考,多总结,多笔记,养成良好的习惯~~
相关文章推荐
- NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、改变)
- NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、...
- 总结:JavaScript中两个值进行比较需要遵循的原则
- NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、...
- NSString的各种用法总结(创建、截取、判断比较、转化数据类型、拼接、替换、添加、追加、读取、写入、删去、改变)
- 条款02:尽量以const,enum,inline替换#define(Prefer const,enum,inline to #define)
- 算法设计课程总结1~2(渐进分析记号,复杂性比较,递归,分治)
- OO设计原则总结
- java基础总结-----》java三大特性/原则------封装
- 在论坛中出现的比较难的sql问题:13(循环替换问题)
- Java 之 文件读写及性能比较总结
- 《Effective C++》学习笔记条款02 尽量以const,enum,inline替换#define
- 数据结构|比较总结线性表的几种主要存储结果
- Effective C++读书笔记之二:尽量以const,enum,inline替换#define
- String-常见功能-转换-切割和替换-比较和去除空格
- 软件工程总结——传统软件开发方法与面向对象开发方法的比较
- Java 中的"=="和equals()方法比较总结。
- 设计模式之禅之设计原则概念总结
- 面向对象程序设计六大原则总结
- MyISAM和Innodb比较整理总结