1.switch 的使用
switch(整型参数)
{
case 常量 :
语句1;
break;
case 常量 :
语句2;
break;
case 常量 :语句3;
break;
case 常量 :语句4;
break;
default:语句5;
break;
}
例:
void Grade(char n)
{
switch (n)
{
case 'A':
printf("85-100分");
break;
case 'B':
printf("70-84分");
break;
case 'C':
printf("60-69分");
break;
case 'D':
printf("0-60分");
break;
default:
printf("您输入的成绩错误!");
break;
}
}
int main()
{
Grade('A');
getchar();
}
注意:switch可用if替换,但比较4个及4个以上的用switch比if高效。
2.const 与宏定义的区别
(1)实现机制
宏是预处理命令,即在预编译阶段进行字节替换。const是常变量,在执行时const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态存储区的只读数据区。根据c/c++语法,当你声明该量为常量,即告诉程序和编译器,你不希望此量被修改。 程序的实现,为了保护常量,特将常量都放在受保护的静态存储区内。凡是试图修改这个区域内的值,都将被视为非法,并报错。
(2)用法区别
a.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。const定义的常量,在程序运行时在常量表中,系统为它分配内存。
b.define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。const定义的常量,在编译时进行严格的类型检验,可以避免出错。
c.define定义表达式时要注意“边缘效应”,例如:
#define N 3+8 // int a = N/2;我们预想的N值是11 //我们预想的a的值是5,可实际上a的值是7 //原因在于在预处理阶段,编译器将 a = N/2处理成了 a = 2+3/2 // 这就是宏定义的字符串替换的“边缘效应” // 因此要如下定义:#define N (2+3)。
const定义的表达式则没有上述问题。const定义的常量叫做常变量原因有二:const定义常量像变量一样检查类型;const可以在任何地方定义常量,编译器对它的处理过程与变量相似,只是分配内存的地方不同。
3.关于宏函数
(1)函数的参数必须声明为特定的类型,它只能在类型合适的表达式使用,而宏函数没有类型,任意整型、长整型、单精度浮点型、双精度浮点型等都可以使用。但预处理器不做参数类型检查,所以危险性高。
(2)使用宏定义在代码规模和速度方面都比函数更胜一筹,使用宏的不利之处在于每次使用宏时,一份宏定义代码的拷贝都会插入到程序中。除非宏非常短,否则使用宏会大幅度增加程序的长度。
#define swap(x, y)\
x = x + y;\
y = x - y;\
x = x - y; // 每一个换行的时候必须加上一个 "\ "
(4)在执行复杂功能时,如递归,函数式宏定义往往会导致较低的代码执行效率。
4.汇编语言 转载:http://blog.sina.com.cn/s/blog_59ca605c0100g3mx.html