精华内容
下载资源
问答
  • case语句中声明变量的各种情况分析: 1, switch(ch) { case 'a': int a = 0; //break;将break去掉,便于说明 case 'b': cout ; break; } 这个是错误的,编译器不会让他通过编译,理由是这样的:...

    case语句中声明变量的各种情况分析:

    1,

    switch(ch) 
    { 
      case 'a': 
        int   a   =   0; 
        //break;将break去掉,便于说明 
      case 'b': 
        cout   < <   "ok"   < <   endl; 
        break; 
    } 

    这个是错误的,编译器不会让他通过编译,理由是这样的: 
    "int   a   =   0 "这个定义放在了case   'a '中,如果允许它顺利通过编译,会造成“不一致”,考虑西面两种情况: 
    (1).ch= 'a ':执行case   'a '分支,a顺利的被初始化为0,执行完case 'a '之后,会顺序执行case 'b '(因为我把break注释掉了),此时如果在case 'b '中引用了a,是没有任何问题的。 
    (2).ch= 'b ':直接执行case 'b '分支,由于跳过了case 'a '分支,所以a并没有被初始化为0,但是a在case 'b '中仍然可见(即case 'b '中仍然可以引用a),那么如果在case 'b '中引用了a,则出现了问题,因为现在a是“未初始化的”。 
    好了,说到这里,楼主应该清楚为什么编译器禁止上述写法了吧! 

    2,现在我们再来看看下面这种: 
    switch(ch) 
    { 
      case 'a ': 
        {int   a   =   0;} 
        //break;将break去掉,便于说明 
      case 'b ': 
        cout   < <   "ok "   < <   endl; 
        break; 
    } 

    这个可以通过编译,因为此时在case 'b '中a不可见(因为a在语句快中),所以不会出现上述的“不一致”现象,因此编译顺利通过。 
    3,再来看看下面的情况: 
    switch(ch) 
    { 
      case 'a ': 
        ... 
        //break;将break去掉,便于说明 
      case 'b ': 
        int   a   =   0; 
        break; 
    } 

    4,此时也会顺利通过编译,因为a的定义(初始化)放在了最后一个分支中,由于在case 'b '后面没有其他分支了,所以同样不会出现上述的“不一致”现象,所以仍然顺利通过编译。

    switch(ch)
    {
    	case 'a':
    		int a;
    		a=0;
    		break;
    	case 'b':
    		int b;
    		b=1;
    		break;
    }

    这样改动之后,编译时也可以通过,因为C语言变量在声明是,已经非配了内存,但是内存中的数值是随机的,相当于进行了初始化,所以在case b中引用不会出错。

    展开全文
  • case语句中的变量定义

    2013-01-29 21:18:52
    2、case语句中可以变量声明和定义,但在case语句中变量初始化话有时会产生编译错误,原因是编译器为了避免“不一致”现象。具体解释如下:因为case语句中变量声明、定义、初始化实在整个switch语句中可见,...

    需要注意一下几点:

    1、case语句的变量声明是在整个switch语句中可见的。

    2、case语句中可以变量声明和定义,但在case语句中变量初始化的话有时会产生编译错误,原因是编译器为了避免“不一致”现象。具体解释如下:因为case语句中的变量声明、定义、初始化实在整个switch语句中可见的,变量声明实在编译时完成,而变量初始化需要在执行是完成,所以,如果在一个非最后一个case的case(命名case1)中进行了变量声明加初始化(如int a=0;),若真正执行的时候switch的条件值是该case后面的某个case(命名case2)的值,则case2中可以看到a的声明,也可以使用啊,但是因为没有执行case1,所以a没有初始化,所以在case2中使用的a并不是“预想的”a,这就产生了不一致。但如果在case1中只有声明或定义,而没有初始化,则不会产生这种不一致,编译时就不会报错。

     

     

    这个可以通过编译,因为此时在case 'b '中a不可见(因为a在语句快中),所以不会出现上述的“不一致”现象,因此编译顺利通过。

    此时也会顺利通过编译,因为a的定义(初始化)放在了最后一个分支中,由于在case 'b '后面没有其他分支了,所以同样不会出现上述的“不一致”现象,所以仍然顺利通过编译。

     

    展开全文
  • 于是也就演化出三种 case 语句里面使用字符串的方法(耐心看下去哦,最后一6d6Linux联盟 种方法才是今天的重点:-p):6d6Linux联盟 6d6Linux联盟 假如我们的具体应用如下(理想的,但是错误的写法):6d6Lin

    展开全文
  • 这是今天在编程碰到问题,当看到 error C2360: initialization of 'wholeAngleOffset' is skipped by 'case' label ... 上网搜了下解决办法,完整解答很少,现将在case语句里定义局部变量


          这是今天在编程中碰到的问题,当看到

    error C2360: initialization of 'wholeAngleOffset' is skipped by 'case' label

      的错误信息时,觉得挺莫名其妙的,变量wholeAngleOffset 在后面的语句中又没有被用到,被跳过又有什么关系 呢?

       上网搜了下解决办法,完整的解答很少,现将在case语句里定义局部变量的情况总结如下:


    switch( x )
    {
    case 1:
    int i = 1;       //error C2360;   case语句内未加大括号且后面还有case分支
    break;

    case 2:
    { int j = 1;   //success       case语句加大括号
    break;
    }

    case 3:
    int k =1;        //success       case语句未加大括号且后面无case分支或default语句
    break;
    }



    总结:

        1、若switch中包括default分支,那么是不允许在未加大括号的前提下直接在case语句中定义局部变量的,所以需要在case语句中定义局部变量时,最好将case语句块用大括号括起;

    2、C/C++中用大括号{}括起的语句块,可以认为是一段完全独立的代码。





    展开全文
  • switch/case语句中,每个case后{}意义

    千次阅读 2019-03-06 21:21:28
    首先,C++中case后面的语句不加{}也是可以编译通过,有一些编译器有特殊要求会要求加上{}; 但是必须加break,如果不加break,代码会一直执行下去,直到遇到break才会跳出switch。 如果无{},case中的局部变量...
  • android library工程使用switch_case语句,调用资源文件的id出现错误的原因分析及解决方法本人写android library使用了一个switch_case语句,case语句后面则调用资源文件的id,正常工程下应该没有问题,但是用...
  •   当我们Android依赖库使用switch-case语句访问资源ID时会报如下图所示的错误,报的错误是case分支后面跟参数必须是常数,换句话说出现这个问题原因是Android library生成R.java中的资源ID不是常数: ...
  • 报错提示:Resource IDs cannot be used in a switch statement in ...原因分析 : 当我们Android依赖库使用switch-case语句访问资源ID时会报如下图所示的错误,报的错误是case分支后面跟参数必须为final类型
  • 我今天要介绍的是一个比较... 于是也就演化出三种 case 语句里面使用字符串的方法(耐心看下去哦,最后一种方法才是今天的重点:-p): 假如我们的具体应用如下(理想的,但是错误的写法): str := '...
  • Android项目,点击事件一般都是实现接口OnClickListener onClick,然后通过switch-case语句访问资源id.如下图 但是写Android依赖库时候发现居然不能使用报错了 非常莫名其妙问题呢,不过错误提示说很明白...
  • switch case语句里面不能定义对象,有语法错误,除非加一个花括号  2015-07-03 16:49 114人阅读 评论(0) 收藏 举报  分类: iOS(240)  最近发现一个问题呢 发现switchcase里面不...
  • 当我们Android依赖库使用switch-case语句访问资源ID时会报如下错误,报的错误是case分支后面跟参数必须是常数。 case expressions must be constant expressions 原因分析 出现这个问题原因是Android ...
  • switch case语句里面不能定义对象,有语法错误,除非加一个花括号   转载自 http://blog.csdn.net/fanjunxi1990/article/details/9162945   最近发现一个问题呢 发现switchcase里面不能去定义对象了,...
  • 仔细了解了一下C或者C++,只要是任何一对花括号 “{ }”定义对象,那么该对象作用域就局限这对花括号里面,上面代码的错误就出现这儿了。 [java] view plaincopy ...
  • eclipse导入工程后 出现下图的错误: 上图中的代码出现这样情况,是因为R.java文件定义属性方式为:public static int xxx = 0x7f0a0003; 而自从adt14开始,R.java文件定义属性方式有发生了...
  • 仔细了解了一下C或者C++,只要是任何一对花括号 “{ }”定义对象,那么该对象作用域就局限这对花括号里面,上面代码的错误就出现这儿了。 switch (i) { case 0: UIViewController *...
  • 1、javaswitch后表达式类型只能为以下几种:byte、short、char、int(Java1.6是这样)、枚举,  java1.7后支持了对string判断 2、case后面必须跟常量,必须要常量,常量用final修饰. 目录...
  • 仔细了解了一下C或者C++,只要是任何一对花括号 “{ }”定义对象,那么该对象作用域就局限这对花括号里面,上面代码的错误就出现这儿了。   [java] view plain copy ...
  • switch case语句犯得错误: 会犯这种错误,都是基础不牢固导致。但是这样的错误却花费了我数小时去debug.想来真是很让人郁闷。 看一段代码:(不想看代码直接看后面总结) private void arrange() { switch ...
  • 错误原因是在case语句中定义了变量,解决办法: 1、将变量定义在switch-case语句之外; 2、如果只在某一个case使用局部变量,用大括号{}将这个case后语句括起来,将变量作用域限定在这一个case中。这也是为...
  • 编译错误 jump to case label [-fpermissive]

    万次阅读 多人点赞 2017-06-19 10:16:16
    switch case 语句中,在case里定义变量就会出现这种编译错误;原因是编译器认为这种写法会错过变量定义,就报错;解决方法:将变量定义移出switch case;总结:不要在if或case下定义变量;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 500
精华内容 200
关键字:

在case语句中错误的是