LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 773|回复: 9

C语言语法问题

[复制链接]
发表于 2006-12-4 12:45:52 | 显示全部楼层 |阅读模式
[php]
switch (var)
{
    case A:
          xxxxx;
          xxxxx;
          break;
     case B:
           XXXX;
           XXXX;
           break;
     default:
           ZZZZZ;
[/php]
在每个case体内,不用{}包围,直接定义变量会无法通过编译,但是如果第一句话随便写一个,甚至直接写个分号,跟着在声明变量,就可以了。
发表于 2006-12-4 15:43:24 | 显示全部楼层
不会吧?
还有这种事?
要不先在switch外面把变量定义好,直接使用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-4 15:46:17 | 显示全部楼层
那样是可以的,用{}夹起来也可以,就是直接首行声明变量不行。

现在在外面声明了。
回复 支持 反对

使用道具 举报

发表于 2006-12-4 20:22:58 | 显示全部楼层
当然不能在 case 里面申明变量,除非用 {} 括起来
这是为了防止程序跳过变量的申明而直接使用某一变量。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-4 20:40:54 | 显示全部楼层
Post by zlbruce
当然不能在 case 里面申明变量,除非用 {} 括起来
这是为了防止程序跳过变量的申明而直接使用某一变量。


谢谢回复!

不过我不太明白,能解释下吗?
回复 支持 反对

使用道具 举报

发表于 2006-12-4 22:06:50 | 显示全部楼层
语法规定。。
回复 支持 反对

使用道具 举报

发表于 2006-12-5 02:24:13 | 显示全部楼层
C++可以,在任何地方定义变量
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-5 08:47:29 | 显示全部楼层
c99规范也可以到处声明。

[php]
#include <stdio.h>

int main()
{
    for(int i=0;i<32;i++)
           printf("%d\n",i);
}

gcc test.c -o test -std=c99

[/php]




但是奇怪的是,为什么case首行不能声明,第二行就可以了。
回复 支持 反对

使用道具 举报

发表于 2006-12-5 09:31:27 | 显示全部楼层
但是 switch case 语句中不一样,比如你在 case 1 中定义一个变量,而在 case 2 中使用了这个变量,那么程序就有可能跳过 case 1 直接执行 case 2 的代码,这个时候就会出现一个变量还没有定义就要使用了。
因此只能在最后一个 case 标号或者 default 标号后面才能定义一个变量。或者将你的变量放到 {} 语句块中。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-5 09:56:53 | 显示全部楼层
Post by zlbruce
但是 switch case 语句中不一样,比如你在 case 1 中定义一个变量,而在 case 2 中使用了这个变量,那么程序就有可能跳过 case 1 直接执行 case 2 的代码,这个时候就会出现一个变量还没有定义就要使用了。
因此只能在最后一个 case 标号或者 default 标号后面才能定义一个变量。或者将你的变量放到 {} 语句块中。


恩,这么说好像有些道理。我现在把变量放在switch之前了,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表