Chinaunix首页 | 论坛 | 博客
  • 博客访问: 613830
  • 博文数量: 79
  • 博客积分: 848
  • 博客等级: 军士长
  • 技术积分: 1800
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-26 19:30
文章分类

全部博文(79)

文章存档

2015年(4)

2013年(39)

2012年(36)

分类: C/C++

2012-09-07 10:17:55

switch是我们做条件选择时,经常用到的一个语句。一直以来对于他的使用相信大家也都是得心应手,前几天在linux下写一个c++程序时遇到了这样的一个问题,请看例子:
#include
using namespace std;
int main()
{
        int i;
        cout<<"please input the value of  i ---(0-9)"<        cin >> i;
        switch(i)
        {
                case 0:
                        int j = 3;
                        cout << j <                        break;
                case 4:
                case 1:
                case 2:
                        break;
        }
        return 0;
}
不知道大家看出这个程序问题在什么地方没有,一开始我是没有感觉有什么不对的地方,后来编译的时候就出现了问题:
testswitch.cpp:14:8: 错误: 跳转至 case 标号 [-fpermissive]
testswitch.cpp:11:8: 错误:   跳过了‘int j’的初始化
testswitch.cpp:15:8: 错误: 跳转至 case 标号 [-fpermissive]
testswitch.cpp:11:8: 错误:   跳过了‘int j’的初始化
testswitch.cpp:16:8: 错误: 跳转至 case 标号 [-fpermissive]
testswitch.cpp:11:8: 错误:   跳过了‘int j’的初始化
大致的意思是,系统不允许我们在case中定义一个变量,原因是我们在一个case中定义的变量,假如在另一个case中被使用就会出现错误,因为一般来说switch语句中的case只能被执行一个。
但是我们假如是想要定义一个在case中使用的临时变量,那该怎么办呢。当然是有办法的其实也很简单就是我们在写case语句时给每一个case加一个大括号就行了。例如程序假如如下写就没有问题:
#include
using namespace std;
int main()
{
        int i;
        cout<<"please input the value of  i ---(0-9)"<        cin >> i;
        switch(i)
        {
                case 0:
                {
                        int j = 3;
                        cout << j <                        break;
                }
                case 4:
                case 1:
                case 2:
                        break;
        }
        return 0;
}
之所以加大括号就是为了明确我们声明的变量的作用域,就是仅仅在本case之中。

当然这里我们提到的问题,并不是每个编译器都会存在。我试验过java之中就不存在这样的问题,我们可以随意在case中声明变量,因为java之中已经明确规定了case中变量的作用域。这可能是c++编译器设计上的一个小小的不足吧!这里拿出来跟大家分享一下,希望对大家有点用处吧

阅读(3988) | 评论(3) | 转发(2) |
给主人留下些什么吧!~~

johnestar2012-09-28 04:26:34

今天也遇到了这个问题,拜读了。你是怎么发现是作用域的问题的呢?牛逼啊!

风箫夜吟2012-09-16 19:41:03

xbbHistory:
编码风格不好,才会有这样的问题。。。。。。。。.....
好吧!

xbbHistory2012-09-15 12:44:23


编码风格不好,才会有这样的问题。。。。。。。。