一个小程序重新透视C语言Switch语句
2010-03-24 22:13
281 查看
最近看berkerly DB的源代码,在hash函数的hash4中一段代码让我很困惑,将其简化如下:
/*ctest.c*/
void testSwitch(int sw){
int loop = 3;
switch(sw){
case 0:
do{
printf("case 0:%d/n",loop);
case 7:
printf("case 7:%d/n",loop);
case 6:
printf("case 6:%d/n",loop);
case 5:
printf("case 5:%d/n",loop);
case 4:
printf("case 4:%d/n",loop);
case 3:
printf("case 3:%d/n",loop);
case 2:
printf("case 2:%d/n",loop);
case 1:
printf("case 1:%d/n",loop);
}while(--loop);
}
}
int main()
{
testSwitch(4);
return 0;
}
程序的输出为
case 4:3
case 3:3
case 2:3
case 1:3
case 0:2
case 7:2
case 6:2
case 5:2
case 4:2
case 3:2
case 2:2
case 1:2
case 0:1
case 7:1
case 6:1
case 5:1
case 4:1
case 3:1
case 2:1
case 1:1
这表明switch语句确实就是使用了goto跳转,所以可以将case植入到其它语句中,如本例中的while语句;case本身就是一个标签;
分析完这段代码,我翻看了以前搞到手的C puzzles,发现其中已经收录了这一puzzle,以前嫌麻烦,懒的看,需要用时才发现。学习源代码!
/*ctest.c*/
void testSwitch(int sw){
int loop = 3;
switch(sw){
case 0:
do{
printf("case 0:%d/n",loop);
case 7:
printf("case 7:%d/n",loop);
case 6:
printf("case 6:%d/n",loop);
case 5:
printf("case 5:%d/n",loop);
case 4:
printf("case 4:%d/n",loop);
case 3:
printf("case 3:%d/n",loop);
case 2:
printf("case 2:%d/n",loop);
case 1:
printf("case 1:%d/n",loop);
}while(--loop);
}
}
int main()
{
testSwitch(4);
return 0;
}
程序的输出为
case 4:3
case 3:3
case 2:3
case 1:3
case 0:2
case 7:2
case 6:2
case 5:2
case 4:2
case 3:2
case 2:2
case 1:2
case 0:1
case 7:1
case 6:1
case 5:1
case 4:1
case 3:1
case 2:1
case 1:1
这表明switch语句确实就是使用了goto跳转,所以可以将case植入到其它语句中,如本例中的while语句;case本身就是一个标签;
分析完这段代码,我翻看了以前搞到手的C puzzles,发现其中已经收录了这一puzzle,以前嫌麻烦,懒的看,需要用时才发现。学习源代码!
相关文章推荐
- 编写一个删除c语言中的注释语句/* */的程序
- 定义一个结构体变量(包括年、月、日),编写程序,要求输入年月日,程序能够计算并输出改日是本年中的第几天。注意闰年问题。(switch语句)
- 利用switch语句编写一个程序,把用数字表示的成绩转化为字母表示的等级。连续查询50次结束
- 由一个switch语句理解c语言中getchar函数
- 《C语言及程序设计》程序阅读——用switch语句实现多分支结构
- C语言利用switch语句实现输入一个字母,输出它前后紧挨着的字母
- 编写一个C语言语句,要求输出这个程序需要运行的时间(用clock()做) 该怎么写?
- 用 switchcase语句写一个程序 输入整数 直到输入0 计算偶数的个数 奇数的个数 和偶数的平均值 与奇数的平均值
- 给朋友写了一个从脚本文件逐行加载执行SQL语句的程序,现在分享给将来需要的朋友们参考
- C语言 switch语句的的用法
- java switch语句练习 从键盘输入2个数和一个运算符(+,-,*,/),输出运算结果
- 学习c语言中,有个程序怎么不懂,求帮忙编一个程序
- C语言,将一个数组中的值按逆序重新存放,例如,原来的顺序是8,6,5,4,1。要求改为1,4,5,6,8
- 编写一个程序,查找C语言中的基本语法错误,如圆括号、方括号、花括号不配对等,正确处理引号与注释
- c语言:根据输入的分数,判断其所在的等级,使用switch语句
- PROCESS_YIELD()宏和C语言的switch语句< contiki学习笔记之七>
- C语言的switch语句
- C语言 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
- 用C语言编写一个Linux下的简单shell程序
- C语言:编写一个程序统计输入字符串中,各个数字、空白字符、以及其他所有字符出现的次数。