【问题标题】:what is more efficient in core C? switch / if statment? [duplicate]核心 C 中什么更有效?开关/if语句? [复制]
【发布时间】:2015-02-20 12:21:54
【问题描述】:

注意:谢谢你告诉我,不管我怎么写,这几乎不会节省,我问的原因是因为它与我的大学作业相似,我想让我的讲师开心,还有更多“可读”的代码或更好的代码,可以让我的讲师更开心,或者这个代码很好,而不是“低效”。

我有一个关于我应该如何编写代码的问题,基本上我有一个 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 语句是否会或多或少有效。

提前致谢!

【问题讨论】:

  • 考虑改用逻辑;类似zone = 'a'+(linenumber/2);
  • for (linenumber = 1; linenumber &lt; 21; linenumber += 2)效率更高!!!
  • 真正的问题是:它有什么实际区别吗? (答案是“不”。)
  • 注意if (linenumber % 2 == 0) { ...中的代码无法访问。
  • 我已经编辑了问题以获得我正在寻找的回复。感谢您的回复

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


【解决方案1】:

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

说真的,写最易读的代码。在这种特殊情况下,switch 语句非常不可读。

对于严重优化问题,请查看 Michael Kohne 的回答。如果您不介意使用分析器,那么速度就不会很重要。

【讨论】:

  • 谢谢你,你可以告诉我我是新手,我问这个问题不一定是为了让它以最快的方式运行,而是因为它与我正在做的任务有关想让讲师更开心。您说 switch 语句不可读,您能详细说明并提出更好的方法吗?
  • RE:“你能详细说明并提出更好的方法吗?”正如其他人指出的那样,您不仅在进行微优化,而且代码也不是特别可读。通常,更具可读性的解决方案也更快:` int zone = UNKNOWN; if (0
【解决方案2】:

除了“左右剖析并查看”之外,没有其他答案。这取决于编译器和目标环境。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      相关资源
      最近更新 更多