C语言switch 第一行不能定义变量的解决办法

1.case后加一行代码

switch(cmd)
{
    case CMD_A:break;
    case CMD_B:
        printf("加一行打印代码\n");
        int test_value;
        break;
    default:
        printf("error cmd\n");
        break;

}

2.限定作用域

switch(cmd)
{
    case CMD_A:break;
    case CMD_B:
        {int test_value;}
        break;
    default:
        printf("error cmd\n");
        break;

}

3.加一个空域

switch(cmd)
{
    case CMD_A:break;
    case CMD_B:
        {}
        int test_value;
        break;
    default:
        printf("error cmd\n");
        break;

}

4.加一个空行

switch(cmd)
{
    case CMD_A:break;
    case CMD_B:
        ;
        int test_value;
        break;
    default:
        printf("error cmd\n");
        break;

}

last.直接添加定义时就会报错。

switch(cmd)
{
    case CMD_A:break;
    case CMD_B:
        int test_value;
        break;
    default:
        printf("error cmd\n");
        break;
}
error: a label can only be part of a statement and a declaration is not a statement
错误:标签只能是语句的一部分,声明不是语句

(个人见解,不一定正确)原因分析:
1.case后的第一行不能跟一个定义或者声明;(函数和变量都不行)
2.想要在case分支中定义或者声明内容需要和case语句至少保持有一个其他语句。
3.接下来要看编译器优化了,当分支过少时是遍历分支,一般少于四个分支和ifelse没有区别,大于四个分支时,会产生一个表,先判断是否会进入default中,然后再通过表来直接跳转,当case的连续性不高时,就会产生两个表来实现跳转。因此并没有变量作用域的问题,如果是作用域,那么放在第二行理论来说也是不可行的, 这应该是C语法的一种限定。当语句过多时,如果是作用域的问题就不会存在这种报错,语句都是跳转了,可能执行不到定义的位置了。
4.尽量避免在switch中定义变量。
5.建议用如下方式使用switch case

switch(cmd)
{
    case CMD_A:
        {
            break;
        }
    case CMD_B:
        {
            int test_value;
            break;
        }
    default:
        {
            printf("error cmd\n");
            break;
        }
}

Original: https://www.cnblogs.com/still-smile/p/16529945.html
Author: Smah
Title: C语言switch 第一行不能定义变量的解决办法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535624/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • c语言编译器介绍

    一、IDE(集成开发环境) 1.windows 编译器 2.Mac中使用 二、环境安装 1.windows安装gcc A、进入安装所在目录,找到MinGW. B、找到我的电脑,右键…

    C语言 2023年5月29日
    076
  • Dijkstra算法(一)之 C语言详解

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 基本…

    C语言 2023年5月29日
    073
  • C语言的原码,反码,补码

    1)原码表示 原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作[x]原。 例如,X1= +1010…

    C语言 2023年5月29日
    078
  • 再次实践用c语言来编写webgl

    当年asm.js出来的时候,emscripten这个工具链还不是很好用,不,是很难用。 尝试以后,被一个helloworld 好几兆吓退了。 webassembly 如今已经发育的…

    C语言 2023年5月29日
    051
  • 遗传算法的C语言实现(一):以非线性函数求极值为例

    以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(…

    C语言 2023年5月29日
    066
  • 【揭秘】C语言类型转换时发生了什么?

    ID:技术让梦想更伟大作者:李肖遥链接:https://mp.weixin.qq.com/s/ZFf3imVaJgeesuhl1Kn9sQ 在C语言中,数据类型指的是用于声明不同类…

    C语言 2023年5月29日
    053
  • Floyd算法(一)之 C语言详解

    和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授…

    C语言 2023年5月29日
    051
  • C语言声明知识体系总结大学霸IT达人

    C语言声明知识体系总结大学霸IT达人 声明(declaration)决定一个或多个标识符的重要性和属性。所声明的标识符可以是对象的名称、函数的名称等。 对象和函数的标识符可以有各式…

    C语言 2023年5月29日
    066
  • C语言实现简易log工具

    0x0 目的 0x1 不用 cout 0x2 不直接用 printf 0x3 用宏实现,而不用函数实现 0x4 简易实现 0x41 最简实现 0x42 打印行号、文件名、自动换行 …

    C语言 2023年5月29日
    059
  • 快速学习C语言一: Hello World

    估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上。 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的。 先快速学习并练习一些基本的语言…

    C语言 2023年5月29日
    072
  • C语言字符串操作总结大全(超详细)

    1)字符串操作strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, …

    C语言 2023年5月29日
    034
  • 一道C语言安全编码题目

    1、前言 最近在网上看到一道C语言题目,用C语言实现一个函数,给定一个int类型的整数,函数输出逆序的整数,例如输入123,则输出字符串”321″,,输入-…

    C语言 2023年5月29日
    055
  • 记C语言浮点数运算处理 “坑” 一则

    看一小段C语言程序: 在你心目中, 变量 I 是怎样的结果? 如果你理所当然地认为是3的话, 那么你就错了~~~ 实际结果应该是2. 为什么? 简而言之, x在内存的值并不是精确的…

    C语言 2023年5月29日
    036
  • C语言初学者代码中的常见错误与瑕疵(23)

    http://bbs.cunix.net/forum.php?mod=viewthread&tid=62&extra=page%3D1 见:C语言初学者代码中的…

    C语言 2023年5月29日
    081
  • Prim算法(一)之 C语言详解

    普里姆(Prim)算法,和克鲁斯卡尔算法一样,是用来求加权连通图的最小生成树的算法。 基本思想对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小…

    C语言 2023年5月29日
    068
  • Crystal 软件学堂:每周一练【C语言】

    欢迎加入作者的小圈子 扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并获取更多隐藏干货,QQ交流群:816747642 微信公众号:Crystal软件学堂 …

    C语言 2023年5月29日
    056
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球