Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368889
  • 博文数量: 100
  • 博客积分: 2500
  • 博客等级: 大尉
  • 技术积分: 1209
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-15 21:24
文章分类

全部博文(100)

文章存档

2011年(100)

分类: C/C++

2011-07-13 22:10:00

1:概述
      在C语言中,很多时候都会用到switch语句,不过一直没有好好研究switch的详细用法。

2:语法
  1. switch(表达式) {
  2.      case 常量表达式:零条或多条语句
  3.          default:零条或多条语句
  4.      case 常量表达式:零条或多条语句
  5. }
  • case后跟的是常量值或常量表达式
  • default可以出现在case列表的任何位置,习惯上放在最后,在其他case均无法匹配时执行
  • 如果没有default并且case均未匹配时,switch语句将什么也不做
  • 标准c编译器允许有257个case标签
  • case内的语句都可以被加上标签
3:例
  1. #include <stdio.h>

  2. static void
  3. test_switch_1(void)
  4. {
  5.     int i = 3;

  6.     switch (i) {
  7.         case 1: printf("case 1\n");
  8.         case 2: printf("case 2\n");
  9.         case 3: printf("case 3\n");
  10.         default: printf("default\n");
  11.         case 4: printf("case 4\n");
  12.     }

  13.     switch (1+2) {
  14.         case 1: printf("case 1\n");
  15.         case 2: printf("case 2\n");
  16.         case 3: printf("case 3\n");
  17.         default: printf("default\n");
  18.         case 4: printf("case 4\n");
  19.     }

  20.     const int three = 3;
  21.     switch (3) {
  22.         case 1: printf("case 1\n");
  23.         case 2: printf("case 2\n");
  24.         case three: printf("case 3\n");
  25.         default: printf("default\n");
  26.         case 4: printf("case 4\n");
  27.     }
  28. }

  29. static void
  30. test_switch_2(void)
  31. {
  32.     switch (2) {
  33.         case 2: do_again:
  34.         case 3: printf("looping\n"); goto do_again;
  35.         default: printf("Never here");
  36.     }
  37. }

  38. static void
  39. test_switch_3(void)
  40. {
  41.     int i = 2;
  42.     switch (i) {
  43.         case 1: printf("case 1\n");
  44.         case 2: {
  45.             if (i > 1)
  46.                 break;
  47.         }
  48.         case 3: printf("case 3\n");
  49.         default: printf("default\n");
  50.     }
  51. }

  52. int
  53. main(int argc, char **argv)
  54. {
  55. //    test_switch_1();
  56. //    test_switch_2();
  57. //    test_switch_3();

  58.     return 0;
  59. }
test_switch_1结果:
  1. xdzh@xdzh-laptop:/media/home/work/c$ gcc -Wall -O2 -o switch switch.c
  2. switch.c: In function ‘test_switch_1’:
  3. switch.c:28: error: case label does not reduce to an integer constant
告诉我们:const关键字并不真正表示常量

test_switch_2结果:
  1. xdzh@xdzh-laptop:/media/home/work/c$ ./switch
  2. looping
  3. looping
  4. looping
  5. looping
  6. looping
  7. looping
  8. looping
switch支持标签和goto

test_switch_3结果:
  1. xdzh@xdzh-laptop:/media/home/work/c$ ./switch
  2. xdzh@xdzh-laptop:/media/home/work/c$
可见没有输出,break语句事实上跳出的是最近的那层循环语句或者switch语句


阅读(2150) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~