在为switch语句使用不同语法时,优化是否有任何可能的更改?

msc*_*msc 1 c syntax performance switch-statement

在以下两个代码段中哪个性能更好?为什么?

小片1:

 switch(a)
 {
      case 1 ... 5:
                   printf("%d\n",a);
                   break;
     case 6 ... 10:
                  printf("%d\n",a);
                  break;
    default:
            printf("%d\n",a);
 }
Run Code Online (Sandbox Code Playgroud)

摘录2:

switch(a)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
          printf("%d\n",a);
          break;
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
           printf("%d\n",a);
           break;
   default:
           printf("%d\n",a);
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 6

这两个片段都是相同的,它们并没有什么不同.您只是使用不同的语法来编写代码,这就是全部.

正如评论中已经提到的,第一种方法是使用gcc扩展来处理case-range.它允许您以便携性为代价编写更短的代码,因此请明智地选择.

任何(半合适的)编译器在生成程序集时都会生成相同的代码,因此在性能方面应该没有区别.