C++语法switch-case中的变量定义(很久在新浪博客的整理)

论坛 期权论坛 脚本     
匿名技术用户   2021-1-6 18:09   27   0

昨天的代码中涉及switch-case语句又出现了某个变量没有初始化的报错,如下提示:

switch(cmd)

{

..............................

case CMD_FAC_DEFAULT:
TvApi_RestoreDefault();
//{
CChannel *pChannel = TvApi_GetChannel(0);
if (pChannel != NULL) {
TvApi_PlayChannel(pChannel,false,true);
delete pChannel;

}
// }

break;

case ....:

break;
}

error: jump to case label
error: crosses initialization of 'CChannel* pChannel'

之前也遇到了这种情况,我总是在整个case条件加上{}来解决,从来没有细究过原因,一个老同事告诉我在中间变量定义的地方加{}也可以,当时不明所以,在网上查了一些资料都没查到点上,是一个同事的提醒我找到的,原来switch-case语句中的变量定义要考虑作用域。

在C++中,switch-case中的case只是一个标签,case中的代码并没有构成一个局部作用域,也就是说,所有在case里面定义的变量作用域都是switch{...},在后面其他case中依然可以访问到这个变量.怎么感觉自己讲不明白呢,还是贴个不错的链接吧:

http://blog.csdn.net/tonywearme/article/details/7075809

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP