24小时热门版块排行榜    

CyRhmU.jpeg
查看: 877  |  回复: 16
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

entire2008

新虫 (初入文坛)

[交流] 【求助】C语言中switch 语句的疑问

【求助】C语言中switch 语句的疑问

switch (const)
case 0x00010000:语句块;
。。。
这样的用法正确吗?
其中,const 为一个ulong 型变量
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

phoenix8848


小木虫(金币+0.5):给个红包,谢谢回帖交流
环境 : Intel T2050 @1.6GHz, 2.0GB RAM Mobile Intel 945GM Express Chipset Family
Windows XP SP2 Pro v5.1.2600
Visual Studio 2005 SP1 Team Suit

代码:
#include
using namespace std;

int main()
{
        const long l_idx = 0x00010000;

        switch(l_idx)
        {
        case 0x00010000:
                cout << "case 1" << endl;
                break;
        case 0x00000000:
                cout << "case 2" <                 break;
        default:
                cout << "error" << endl;
                break;
        }

        return 0;
}


汇编:
--- e:\visual studio 2005\projects\democpp\ex_01\ex_01_02.cpp ------------------
#include
using namespace std;

int main()
{
004114B0  push        ebp  
004114B1  mov         ebp,esp
004114B3  sub         esp,0D0h
004114B9  push        ebx  
004114BA  push        esi  
004114BB  push        edi  
004114BC  lea         edi,[ebp-0D0h]
004114C2  mov         ecx,34h
004114C7  mov         eax,0CCCCCCCCh
004114CC  rep stos    dword ptr es:[edi]
        const long l_idx = 0x00010000;
004114CE  mov         dword ptr [l_idx],10000h

        switch(l_idx)
004114D5  mov         dword ptr [ebp-0D0h],10000h
004114DF  cmp         dword ptr [ebp-0D0h],0
004114E6  je          main+73h (411523h)
004114E8  cmp         dword ptr [ebp-0D0h],10000h
004114F2  je          main+46h (4114F6h)
004114F4  jmp         main+0A0h (411550h)
        {
        case 0x00010000:
                cout << "case 1" << endl;
004114F6  mov         esi,esp
004114F8  mov         eax,dword ptr [__imp_std::endl (41A338h)]
004114FD  push        eax  
004114FE  push        offset string "case 1" (41780Ch)
00411503  mov         ecx,dword ptr [__imp_std::cout (41A33Ch)]
00411509  push        ecx  
0041150A  call        std:perator<< > (41114Fh)
0041150F  add         esp,8
00411512  mov         ecx,eax
00411514  call        dword ptr [__imp_std::basic_ostream >:perator<< (41A320h)]
0041151A  cmp         esi,esp
0041151C  call        @ILT+410(__RTC_CheckEsp) (41119Fh)
                break;
00411521  jmp         main+0CBh (41157Bh)
        case 0x00000000:
                cout << "case 2" < 00411523  mov         esi,esp
00411525  mov         eax,dword ptr [__imp_std::endl (41A338h)]
0041152A  push        eax  
0041152B  push        offset string "case 2" (417804h)
00411530  mov         ecx,dword ptr [__imp_std::cout (41A33Ch)]
00411536  push        ecx  
00411537  call        std:perator<< > (41114Fh)
0041153C  add         esp,8
0041153F  mov         ecx,eax
00411541  call        dword ptr [__imp_std::basic_ostream >:perator<< (41A320h)]
00411547  cmp         esi,esp
00411549  call        @ILT+410(__RTC_CheckEsp) (41119Fh)
                break;
0041154E  jmp         main+0CBh (41157Bh)
        default:
                cout << "error" << endl;
00411550  mov         esi,esp
00411552  mov         eax,dword ptr [__imp_std::endl (41A338h)]
00411557  push        eax  
00411558  push        offset string "error" (4177FCh)
0041155D  mov         ecx,dword ptr [__imp_std::cout (41A33Ch)]
00411563  push        ecx  
00411564  call        std:perator<< > (41114Fh)
00411569  add         esp,8
0041156C  mov         ecx,eax
0041156E  call        dword ptr [__imp_std::basic_ostream >:perator<< (41A320h)]
00411574  cmp         esi,esp
00411576  call        @ILT+410(__RTC_CheckEsp) (41119Fh)
                break;
        }


        return 0;
0041157B  xor         eax,eax
}

结论:可以运行.不过受机器位限制.
16楼2009-08-24 10:32:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 17 个回答

hsdly

银虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
bslt(金币+1,VIP+0):感谢交流。。。 6-29 19:51
C语言里面有这个ulong类型吗?好像有unsigned long,跟长整数一样的,但是你case 里面应该写的是16进制的数吧
2楼2009-06-25 17:30:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

entire2008

新虫 (初入文坛)

  谢谢楼上的回答,是的ulong 我这里是unsigned long 的简写,是4字节的长整型,
我想问的就是case 后能不能跟一个长整型的数,即case 0x00010000:语句块; 这种语句能成立吗??
3楼2009-06-27 00:09:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yneversky

金虫 (初入文坛)

成立.............
4楼2009-06-28 09:04:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见