自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
语法概述:
#define a b
作用:将a替换为b
示例如下:
#include
#include
#define NUMBER 5
int main()
{
int i;
for(i=0;i"i=%d\n",i);
}
return 0;
}
运行结果:
i=0
i=1
i=2
i=3
i=4
Process returned 0 (0x0) execution time : 1.179 s
Press any key to continue.
通过定义宏NUMBER,在程序编译执行时会将NUMBER替换成5。
注意:
先来做个练习:利用函数求整数和小数的平方值
代码如下:
#include
#include
int sqr_int(int x){
return x*x;
}
double sqr_double(double y){
return y*y;
}
int main()
{
int x;
double y;
x=sqr_int(5);
y=sqr_double(1.3);
printf("计算结果是:%d %f",x,y);
return 0;
}
在该示例中,写了两个函数来分别计算整数的平方和小数的平方。其实,它们的本质是相同的——把两个数相乘作为结果;差别就在于数据类型的不一样。此时,我们就可以用函数式宏来进行代码的优化,代码如下:
#include
#include
#define sqr(x) ((x)*(x))
int main()
{
int x;
double y;
x=sqr(5);
y=sqr(1.3);
printf("计算结果是:%d %f",x,y);
return 0;
}
在该示例中定义了一个函数式宏,即代码第4行:
#define sqr(x) ((x)*(x))
所以,代码中的sqr(x)均会替换成((x)*(x));例如:
sqr(5) 会被替换成((5)*(5))
sqr(1.3)会被替换成((1.3)*(1.3))
C语言中有一个较为特殊的运算符——逗号运算符(,)。
该运算符用于连接两部分,它的计算过程如下:
先求表达式1,后求表达式2;最终结果是表达式2的值
例如:
(3+5,6+8) 先求3+5的值为8,再求6+8的值为14;最终的结果为14
(a=2*5,a*4) 先求a=2*5得到a的值是10,再求a*4的值是40;最终的结果是40
逗号表达式小结:
明白了逗号表达式再来看看函数式宏和逗号表达式的应用,代码如下:
#include
#include
#define puts_alert(str) (puts("提示信息:"),puts(str))
int main()
{
printf("请您输入一个整数:\n");
int number;
scanf("%d",&number);
if(number==0){
puts_alert("您输入的数字是0");
}else{
puts_alert("您输入的数字不是0");
}
return 0;
}