lou0908 发表于 2012-8-31 23:42:10

c语言变量转化成立即数问题请教

例如我要用switchcase语句

int i=2;
switch(t)
{
   case 1:    ----->编译没有错误,因为这个是立即数
       f1();
       break;
   case i:    ------>编译错误,因为i是变量,本意是t=2,就执行case下面程序f2(),但是因为i是变量,无法比较,那怎么把这个变量i转化成常量数据2呢?
      f2();
      break;
}

坐等高手帮忙解决!

lou0908 发表于 2012-8-31 23:56:20

自己顶一下

daFish 发表于 2012-8-31 23:56:43

搞得这么不和谐干嘛,改用if-else if-else结构

tim 发表于 2012-9-1 00:02:48

C语言里面没有立即数这个说法

lou0908 发表于 2012-9-1 00:04:39

daFish 发表于 2012-8-31 23:56 static/image/common/back.gif
搞得这么不和谐干嘛,改用if-else if-else结构

搞成if-else当然可以了,如果有我所想要的方式的话 那更好了

marshallemon 发表于 2012-9-1 00:05:08

LZ连swtich的语法都没看清楚,case后只能是常量,立即数的概念是汇编中的

lou0908 发表于 2012-9-1 00:17:10

marshallemon 发表于 2012-9-1 00:05 static/image/common/back.gif
LZ连swtich的语法都没看清楚,case后只能是常量,立即数的概念是汇编中的

我知道我这个case后面必须是常量,我只是举例说明 用变量 i ,我的意思是本来i=2, 通过一个操作,把这变量i 转化成常量 2

marshallemon 发表于 2012-9-1 00:21:10

转毛,建议lZ好好看看书,变量和常量的存储位置都是不同的,你准备怎么转?
如果你的I值是每个程序都不同,但在一个程序中固定时,应该使用常量定义,把常量定义成一个符号,CASE后跟这个符号就好

shark 发表于 2012-9-1 00:51:24

看了半天,没看懂楼主要表达什么. {:sweat:}

albert_w 发表于 2012-9-1 01:26:29

放弃吧,没解的。 这里我猜测实现上使用了查表跳转的方式,因此搞成变量是没有可能了。

millwood0 发表于 2012-9-1 04:34:26

when t=i=1, what do you want the computer to do?

tanguicaicai 发表于 2012-9-1 09:56:45

水平太低~~看不懂lz高深的问题

lalapunk1983 发表于 2012-9-1 10:55:23

编译器只看数据类型的,才不去管数据的内容是多少。
就跟厕所一样只关注是男是女,不关注三围是多少。

zhikunWang 发表于 2012-9-1 11:45:18

楼主只能switch(i),switch(t);

ziruo2002ab 发表于 2012-9-1 11:52:12

lz没有任何硬件的概念
没有任何编译器的概念
case语句在翻译成汇编时肯定是用了跳转语句
跳转的位置显然是必须固定的
如果你以一个变量为跳转位置
你叫编译器何所适从

linucos 发表于 2012-9-1 12:10:37

呵呵,弄明白就不纠结了

xizi 发表于 2012-9-1 12:30:13

没解,你也别坐等高人了。你自己创造一个解,然后申请诺奖去。

zhonggp 发表于 2012-9-1 13:18:46

个人认为楼主还是要加强一下C语言和关于数据存储那块的内容.

zhonggp 发表于 2012-9-1 13:19:51

xizi 发表于 2012-9-1 12:30 static/image/common/back.gif
没解,你也别坐等高人了。你自己创造一个解,然后申请诺奖去。

这位兄弟你的积分是负数怎么做到的啊??????????????????

t2397362 发表于 2012-9-1 13:53:19

楼主要的功能在c语言应该没法实现,但是某些编译器case可以指定范围。

sky5566 发表于 2012-9-1 16:11:15

1代表什麼? 2又代表什麼?
老外都用英文取代數值,這樣比較好理解程序.
所以你用中文試試看喔{:lol:}

xizi 发表于 2012-9-2 08:09:47

zhonggp 发表于 2012-9-1 13:19 static/image/common/back.gif
这位兄弟你的积分是负数怎么做到的啊??????????????????

很容易做到,只要你能获得站长奖赏就可以。

chinabn 发表于 2012-9-3 10:58:22

int i=2;
switch(t)
{
   case 1:    ----->编译没有错误,因为这个是立即数
       f1();
       break;
    default:
       if(t == i)
      {
         f2();
      }
      break;
}

liurangzhou 发表于 2012-9-3 11:13:49

ziruo2002ab 发表于 2012-9-1 11:52 static/image/common/back.gif
lz没有任何硬件的概念
没有任何编译器的概念
case语句在翻译成汇编时肯定是用了跳转语句


感觉你的理解也有问题的

lovelywwei 发表于 2012-9-3 11:22:57

立即数?那不是汇编中的玩意么?LZ你想干嘛?
建议LZ看看switch语句的汇编就明白了。

summarize 发表于 2012-9-3 23:00:59

说明LZ的汇编还是有一定功底的.
页: [1]
查看完整版本: c语言变量转化成立即数问题请教