搜索
bottom↓
回复: 25

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

[复制链接]

出0入0汤圆

发表于 2012-8-31 23:42:10 | 显示全部楼层 |阅读模式
例如我要用switch  case语句

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

坐等高手帮忙解决!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-8-31 23:56:20 | 显示全部楼层
自己顶一下

出0入0汤圆

发表于 2012-8-31 23:56:43 | 显示全部楼层
搞得这么不和谐干嘛,改用if-else if-else结构

出0入93汤圆

发表于 2012-9-1 00:02:48 | 显示全部楼层
C语言里面没有立即数这个说法

出0入0汤圆

 楼主| 发表于 2012-9-1 00:04:39 | 显示全部楼层
daFish 发表于 2012-8-31 23:56
搞得这么不和谐干嘛,改用if-else if-else结构

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

出0入85汤圆

发表于 2012-9-1 00:05:08 | 显示全部楼层
LZ连swtich的语法都没看清楚,case后只能是常量,立即数的概念是汇编中的

出0入0汤圆

 楼主| 发表于 2012-9-1 00:17:10 | 显示全部楼层
marshallemon 发表于 2012-9-1 00:05
LZ连swtich的语法都没看清楚,case后只能是常量,立即数的概念是汇编中的

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

出0入85汤圆

发表于 2012-9-1 00:21:10 | 显示全部楼层
转毛,建议lZ好好看看书,变量和常量的存储位置都是不同的,你准备怎么转?
如果你的I值是每个程序都不同,但在一个程序中固定时,应该使用常量定义,把常量定义成一个符号,CASE后跟这个符号就好

出0入0汤圆

发表于 2012-9-1 00:51:24 | 显示全部楼层
看了半天,没看懂楼主要表达什么.

出0入42汤圆

发表于 2012-9-1 01:26:29 | 显示全部楼层
放弃吧,没解的。 这里我猜测实现上使用了查表跳转的方式,因此搞成变量是没有可能了。

出0入0汤圆

发表于 2012-9-1 04:34:26 | 显示全部楼层
when t=i=1, what do you want the computer to do?

出0入0汤圆

发表于 2012-9-1 09:56:45 | 显示全部楼层
水平太低~~看不懂lz高深的问题

出0入0汤圆

发表于 2012-9-1 10:55:23 | 显示全部楼层
编译器只看数据类型的,才不去管数据的内容是多少。
就跟厕所一样只关注是男是女,不关注三围是多少。

出0入0汤圆

发表于 2012-9-1 11:45:18 | 显示全部楼层
楼主只能switch(i),switch(t);

出200入657汤圆

发表于 2012-9-1 11:52:12 | 显示全部楼层
lz没有任何硬件的概念
没有任何编译器的概念
case语句在翻译成汇编时肯定是用了跳转语句
跳转的位置显然是必须固定的
如果你以一个变量为跳转位置
你叫编译器何所适从

出0入0汤圆

发表于 2012-9-1 12:10:37 | 显示全部楼层
呵呵,弄明白就不纠结了

出0入0汤圆

发表于 2012-9-1 12:30:13 | 显示全部楼层
没解,你也别坐等高人了。你自己创造一个解,然后申请诺奖去。

出0入0汤圆

发表于 2012-9-1 13:18:46 | 显示全部楼层
个人认为楼主还是要加强一下C语言和关于数据存储那块的内容.

出0入0汤圆

发表于 2012-9-1 13:19:51 | 显示全部楼层
xizi 发表于 2012-9-1 12:30
没解,你也别坐等高人了。你自己创造一个解,然后申请诺奖去。

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

出0入0汤圆

发表于 2012-9-1 13:53:19 | 显示全部楼层
楼主要的功能在c语言应该没法实现,但是某些编译器case可以指定范围。

出0入0汤圆

发表于 2012-9-1 16:11:15 | 显示全部楼层
1代表什麼? 2又代表什麼?
老外都用英文取代數值,這樣比較好理解程序.
所以你用中文試試看喔

出0入0汤圆

发表于 2012-9-2 08:09:47 | 显示全部楼层
zhonggp 发表于 2012-9-1 13:19
这位兄弟你的积分是负数怎么做到的啊??????????????????

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

出0入0汤圆

发表于 2012-9-3 10:58:22 | 显示全部楼层
int i=2;
switch(t)
{
     case 1:    ----->编译没有错误,因为这个是立即数
       f1();
       break;
    default:
       if(t == i)
      {
           f2();
      }

      break;
}

出0入0汤圆

发表于 2012-9-3 11:13:49 | 显示全部楼层
ziruo2002ab 发表于 2012-9-1 11:52
lz没有任何硬件的概念
没有任何编译器的概念
case语句在翻译成汇编时肯定是用了跳转语句

感觉你的理解也有问题的

出0入30汤圆

发表于 2012-9-3 11:22:57 | 显示全部楼层
立即数?那不是汇编中的玩意么?LZ你想干嘛?
建议LZ看看switch语句的汇编就明白了。

出0入0汤圆

发表于 2012-9-3 23:00:59 | 显示全部楼层
说明LZ的汇编还是有一定功底的.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 15:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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