什么在核心C更有效?切换/如果声明?

时间:2014-12-22 11:44:10

标签: c performance if-statement switch-statement case

注意:谢谢你告诉我,无论我怎么写,这都会毫无保留,我问的原因是因为它与我的单身任务类似,我想让我的讲师开心,是否有更多“可读”的代码或更好的东西,可以让我的讲师更快乐,或者这段代码很好而不是“效率低下”。

我有一个关于我应该如何编写代码的问题,基本上我有一个switch语句,用于将char更改为特定的char,具体取决于它所处的内容。但是只有当亚麻布是一个奇数时才会改变(从0开始,所以每第二行都会选择一个新的字符)。目前我的代码是......

int linenumber;
char zone = UNKNOWN;

  for (linenumber = 0; linenumber < 21; linenumber++) {

     switch (linenumber) {
        case (1):
           zone = 'a';
           break;

        case (3):
           zone = 'b';
           break;

        case (5):
           zone = 'c';
           break;

        case (7):
           zone == 'd';
           break;

        case (9):
           zone = 'e';
           break;

        case (11):
           zone = 'f';
           break;

        case (13):
           zone = 'g';
           break;

        case (15):
           zone = 'h';
           break;

        case (17):
           zone = 'i';
           break;

        case (19):
           zone = 'j';
           break;

        if (linenumber % 2 == 0) {

        }
    }
}

但是,由于交换仅在第二种情况下发生,因此编写if语句(如....)会更有效率。

if (linenumber % 2 == 1) {
   switch.....
}

把switch语句放在里面......只是想知道在这种情况下额外的if语句是否会更高效或更低效。

提前致谢!

3 个答案:

答案 0 :(得分:6)

你问的是错误的问题。您要做的是称为微优化。它节省了纳秒。通常它不会,因为你三年前学到的东西今天可能是错的。真正的程序员不关心纳秒,他们会获得至少可以节省微秒的巨大胜利。

说真的,编写最具可读性的代码。在这种特殊情况下,switch语句非常难以理解。

对于严重的优化问题,请查看Michael Kohne的答案。如果你不能使用分析器来打扰,那么速度就不是很重要了。

答案 1 :(得分:2)

没有答案,除了'两种方式并且看到'。这取决于编译器和目标环境。

答案 2 :(得分:2)

这些微优化不太可能影响代码的性能。

此外,如果您需要关心,那么您应该对代码进行性能分析。在这种情况下,找出switch case和if-else块之间的性能差异将是微不足道的。