if(a)
else if(0)else if(1)else if(2)
..
.
.
.else if(n)
switch(a)
case 0:case 1:case 2:
..
.
.
case n:哪种效率高?执行顺序如何?
第一种好象是从头到脚找
不过我记得第二种也是从头到脚找,不过好像第二种好点?
else if(0)else if(1)else if(2)
..
.
.
.else if(n)
switch(a)
case 0:case 1:case 2:
..
.
.
case n:哪种效率高?执行顺序如何?
第一种好象是从头到脚找
不过我记得第二种也是从头到脚找,不过好像第二种好点?
switch...case应该也是从头开始的 下面这段程序能证明
但是单单的把它理解为和if ...elseif一样也不对 下面这段程序也能看出来
the c++ programming language上有一道题
我把题中的函数send()随便写进了一段程序中 你可以编译一下试试
#include <iostream>void send (int *to,int *from,int count)
{
int n=(count+7)/8;
switch (count%8)
{
case 0: do { *to++=*from++;
case 7: *to++=*from++;
case 6: *to++=*from++;
case 5: *to++=*from++;
case 4: *to++=*from++;
case 3: *to++=*from++;
case 2: *to++=*from++;
case 1: *to++=*from++;
} while (--n>0);
}
}
void main(void) {
int a[10],b[10]={1,2,3,4,5,6,7,8,9,0};
send(a,b,5);
for (int i=1;i<=10;i++) {
std::cout<<"a["<<i<<"]="<<a[i-1];
}
}
按照这个switch...case中写的 我觉得case x:看起来更象一个label而不象if这样带有语意
因为这段程序是编译无误逻辑也无误的 说明"do {"被编译器看见了 比如第一次count%8为5 那么将从case 5开始顺序执行 但是此时do { } while 循环体确实再起作用 虽然case 0没有被执行但是编译器还是看到了do {并对它做了编译 如果是if ... else if那就没戏了
写这段程序
然后TRACE CPU窗口的汇编就行了
干看是看不出来的
据说更是没影的事情