case中定义变量

1.c语言switch/case中定义变量

case 0: int b = 0 ; printf("0");break;

case 1: printf("1");break;

default: printf("default");break;

C和C++都会报错

情况1:

case 0: int b; b = 0 ; printf("0");break;

case 1: printf("1");break;

default: printf("default");break;

情况2:

case 0: {int b = 0 ; printf("0")};break;

case 1: printf("1");break;

default: printf("default");break;

这两种情况C和C++都不会报错

int b = 0;

case 0: printf("0 %d",b);break;

case 1: printf("1 %d",b);break;

default: printf("default %d",b);break;

C不会报错但是C++会报错

总结:问题根源在于变量的作用域。case中变量外部加上“{}”肯定不会有错

时间: 2024-08-26 13:43:24

case中定义变量的相关文章

如何在switch case中定义变量(不用花括号)

这个周末有幸见到了几位神交已久的库友(天天/迪迪/丁丁),大家一起扯了些有的没的,很开森! 天天考了我一个问题,在C语言里面,如何在switch case中定义一个变量?要求是不用花括号. 这个问题是背景是,下面的代码是编译不过的,因为在case后面不能直接定义变量. switch (v) {    case 1:       int a;       get_value_of_xx(&a);       set_yy(a);       break;    case 2:       //do

freemarker 模板中定义变量

在模板中可以定义三种类型的变量: 简单变量:它能从模板中的任何位置来访问,或者从使用 include 指令引入的模板访问.可以使用 assign 或 macro 指令来创建或替换这些变量. 局部变量:它们只能被设置在宏定义体内,而且只在宏内可见.一个局部变量的生存周期只是宏的调用过程.可以使用 local 指令在宏定义体内创建或替换局部变量. 循环变量:循环变量是由指令(如 list )自动创建的,而且它们只在指令的开始和结束标记内有效.宏的参数是局部变量而不是循环变量. 示例:使用 assig

关于在头文件中定义变量的问题

如果在一个头文件中定义了一个变量 A.h: int i; 在A.cpp,B.cpp...文件中包含了这个头文件,编译时就会产生重复定义的错误.问题所在是因为int i;这句代码是定义了一个i变量,包含一次头文件就定义了一次i,包含多次肯定引起错误.如果改成extern int i;这句代码就变成了一个声明了.并不会定义i这个变量.不过在多个cpp文件里初始化一样会出现错误.只能在一个cpp文件中进行初始化.

c语言头文件中定义变量

最近在看一个PHP的扩展源码,编译的时候的遇到一个问题: ld: 1 duplicate symbol for architecture x86_64 仔细看了一下源码,发现在头文件中 出现了全局变量的定义 ZEND_DECLARE_MODULE_GLOBALS(xx) 简单开来,可以这么理解 // t1.h #ifndef T1_H #define T1_H int a = 0; #endif //------------------ //t1.c #include "t1.h" #

在properties.xml中定义变量,在application.xml中取值问题

如果为application.xml中的变量赋默认值,同时又在properties.xml中变量赋值,而加载后是取不到properties.xml中的值的问题. 解决这个问题需要加上黑体部分配置: <bean id="sysConfiguration" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property na

dos中定义变量与获取常见的引用变量以及四则运算(set用法)

在dos中使用set定义变量: set  a=8              (注意等号两边没有空格) 引用变量如: echo  %a%        将打印a的值 (%a%是获取变量a的值) dos中要使用算术运算,需要使用 set 命令: set  /a  val=3*4     将打印12     (注意等号两边没有空格) 例子 @echo off set b=8888 rem 下一条语句定义了dos中的算术运算 set /a val = 3*2 for /l %%i in (1,1,%va

在.cpp文件中定义变量,在.h文件中extern

在cocos2d-x 的D:\phoneclient\cocos2dxlib\cocos\base\CCValue.h 文件中,发现如下代码: 全局查找之后,在D:\phoneclient\cocos2dxlib\cocos\base\CCValue.cpp 文件中,找到变量的定义: extern int a;//这是声明aint a;//这是定义a正常情况下都是h声明cpp定义. 声明和定义是不同的,声明可以有多次,定义只能有一次.h文件可能被很多cpp文件包含,所以里面只能写声明不能写定义,

C语言中定义变量“#X”,”X##”, “##X” 和“##X##”解析

关于#和## 在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号.比如下面代码中的宏: 1. #使用 #define WARN_IF(EXP) / do{ if (EXP) / fprintf(stderr, "Warning: " #EXP "/n"); } / while(0) 那么实际使用中会出现下面所示的替换过程: WARN_IF (divider );

java和C#中 定义变量,加一个小括号是什么意思。。。

在群里灌水发现,有人这样定义字符串,感觉很好奇..又问了群友,群友说这样定义没问题.. String strtemp = ("test"); 我自己试了下,java和C#都可以,C# 在类库中,编译成dll后,括号被移除了.. 谁发明的这种写法...?