用 C 计算什么更快? (x==0) 还是 (0==x)? [重复]

问题描述 投票:0回答:1

我想知道用 C 语言计算什么更好:

if (x==0) 
{
    // Some code ...
}

if (0==x) 
{
    // Some code ...
}

我知道最后一个更好,以防程序员忘记第二个“=”并写“0 = x”而不是“0 == x”,因为编译器会抛出错误。

但我的问题是:

  1. 从处理器的角度来看,在计算时间上。
  2. 总的来说(不仅针对AMD/Intel CPU,也针对不同处理器的嵌入式组件。

我认为这与“左值”和“右值”有关,我尝试在我的 PC 中进行模拟,但没有明显的见解。

c embedded compiler-optimization rvalue lvalue
1个回答
1
投票

没有一般的答案。实际计算时间取决于目标系统和编译器及其优化。

如果禁用 all 优化,您可能会观察到生成不同的机器代码,并且 可能 可能有不同的计算时间。

然而,现代编译器以多种方式优化您的代码。您可以期望这两个变体生成相同的机器代码。

为了确定您的系统,编译两个变体并查看生成的机器代码。认真的编译器有选项或工具来生成列表。

结论: 如果您没有遇到性能问题,不要进行微优化。以最好的方式编写源代码,以防止人为错误,并且最容易理解。 (顺便说一句,Yoda 条件 往往更难理解。)


术语“右值”在标准中只使用了两次,一次在注释中:

有时称为“右值”的内容在本文档中被描述为“表达式的值”。

第二次在索引中,指向这张纸条。显然它不再被使用了。

相等运算符不区分其操作数。两者都是同类。

© www.soinside.com 2019 - 2024. All rights reserved.