switch语句下的变量声明和定义
switch语句下的变量声明和定义的问题:
switch...case...
语句中存在声明和定义会出现一些问题。这个由switch语法特性决定的, switch中每个case都是平等的层次,区别于一般的if else语句,我们知道swich的case语句可以这样写:
switch (i)
{
case 1:
case 2:
int n = 0;
break;
case 3:
break;
default:
break;
}
所以整个switch语句处在同一个代码块中,只不过有多个case语句,既然多个case在同一个代码块中,那么int n = 0;的语句就是块中局部变量,我们知道变量在编译器中编译时,是从它的定义点开始有效的,也就是说int n=0;在整个代码块中都是可见的,但又个问题这里switch语句,编译器在编译的时候有可能跳过case 2中的int n=0;定义,所以编译器才报错,当然解决这个语法错误有3种方法:
解决方法:
(1)case中加括号,明确声明变量的域。
switch (i)
{
case 1:
case 2:
{
int n = 0;
}
break;
default:
break;
}
(2)变量只声明不定义,只有使用的时候才去定义。
switch (i)
{
case 1:
case 2:
int n;
n = 0;
break;
default:
break;
}
(3)变量的定义放到switch的外边。
int n = 0;
switch (i)
{
case 1:
case 2:
break;
default:
break;
}
switch语句下的变量声明和定义的更多相关文章
- C++中switch 语句中的变量声明和
switch 内部的变量定义: ; switch(i) { : string str; //error ; //error int val2; //right ; //right : val2 = ; ...
- c++变量声明、定义,const变量
变量声明和定义的主要区别: 声明不分配存储空间,定义分配存储空间. 变量可以声明多次,但只能定义一次(一个变量只能在一个源文件中定义) 声明通常放在头文件(.h)中,定义放在源文件(.cpp)中 变量 ...
- PHP中变量声明和定义的区别
先记录一下(不知道PHP是不是一样,但是C语言是这样的):把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”.声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用 ...
- [C++]变量声明与定义的规则
声明与定义分离 Tips:变量能且仅能被定义一次,但是可以被多次声明. 为了支持分离式编译,C++将定义和声明区分开.其中声明规定了变量的类型和名字,定义除此功能外还会申请存储空间并可能为变量赋一个初 ...
- 变量声明和定义及extern 转载
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...
- 变量声明和定义的关系------c++ primer
为了允许把程序分成多个逻辑部分来编写,c++语言支持分离式编译机制 为了支持分离式编译,c++语言把声明和定义区分开来.声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名 ...
- 内存四个领域,变量声明和定义,注册,c内联汇编,auto,堆,不变,静态变量
1.内存四大区域 2.在程序中,变量的声明能够有多份,定义仅仅能有一份 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVh ...
- C++11类内static成员变量声明与定义
众所周知,将一个类内的某个成员变量声明为static型,可以使得该类实例化得到的对象实现对象间数据共享. 在C++中,通常将一个类的声明写在头文件中,将这个类的具体定义(实现)写在cpp源文件中. 因 ...
- 【转】基于linux下的变量声明declare的用法
转自:http://techcurtman.iteye.com/blog/1249512 declare 功能介绍:声明变量的属性,如果使用declare,后面没有任何参数,那么bash就会主动将所有 ...
随机推荐
- Android 组件类继承关系结构图
- 黑马程序员_ Objective-c 概述及面向对象与三大特性
-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ (一).语法概述 1. oc介绍:(.m文件) 1> c语言的基础上,增加 ...
- vs文件属性(生成操作)各选项功能(发布Web项目时使用)
转自:http://www.cnblogs.com/paulhe/p/4490583.html 右击项目里的文件,选择属性(F4)会有[生成操作]的选项. 它提供了14项选择,如图: 在这说一下常用的 ...
- 一个.NET通用JSON解析/构建类的实现(c#)转
转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...
- jQuery 中对 CommonJs 的支持处理
jQuery 中对 CommonJs提供了直接支持,可以在 CommonJs模块中直接引用 jQuery 对象,这是如何实现的呢? 从 factory 函数说起 说先看 jQuery 的主体函数定义, ...
- winserver2008 R2 64位 企业版 , IIS 配置运行 asp+access 网站
新建网站,程序池由DefaultAppPool 改为 Classic .NET AppPool, 并在 高级设置中,把启用 32位应用程序 设为 true 对 access 所在目录新加 every ...
- pip install 报错原因
1. 要在~/.pip/pip.conf中添加源的地址. 2. 在运行pip install 命令的时候加上sudo -H
- OpenWrt自定义和官方一样的固件
我用的OpenWrt版本是Barrier Breaker 14.07,硬件是NetGear WNDR4300. 我自定义固件的目的是把固件的根分区扩到最大(100MB,总FLASH是128MB),试过 ...
- SequoiaDB 笔记
SequoiaDB 笔记 这几天翻了翻SequoiaDB的代码,记了点笔记.不保证下面内容的正确性(肯定有错的地方) 个人观感 优点 代码还不错,设计也算简洁. EDU和CB的使用让整个系统变得简单很 ...
- 微软第四题 给定cost能遍历的最大城市数
有向图中N*N矩阵 cost:M, 最多可以遍历的结点个数 例如A可以有0->1->2->0->1 代价:2+2+3+2=9<10 输出4 #include <io ...