【问题标题】:Getting different results for same thing [duplicate]为同一件事获得不同的结果[重复]
【发布时间】:2013-09-06 10:25:06
【问题描述】:
public class main {

public static void main(String[] args) {
  int x=20,y=35;       
  x = y++ + x++;
  y = ++y + ++x;
  System.out.printf("%d %d\n",x,y);
}
//Output : 56,93

#include<stdio.h>
void main()
{
  int x=20,y=35;       
  x = y++ + x++;
  y = ++y + ++x;
  printf("%d %d ",x,y);
}
//Output : 57 94

根据运算符优先规则,我通过 Java 代码得到的任何输出都是正确的,但是在“C”代码中执行相同的输出时,它会将输出值增加 1。我使用的是 ubuntu 12.04 64 位操作系统。

【问题讨论】:

  • 这是 C 和 C++ 中未定义的行为
  • C 代码不是有效的 C 代码。
  • 应该main in c 返回 int 吗?
  • @PeterLawrey “在 C 中,main 可以是 void 或 int”这不是我的 C99 标准副本在第 5.1.2.2.1:1 条中所说的。哪个子句告诉你main() 可以返回void
  • @PeterLawrey 根据c标准,编译和标准/非标准main()之间可能存在差异,应该返回int类型。

标签: java c operators operator-precedence


【解决方案1】:

这不是一回事,因为 Java 和 C 是不同的语言。

Java 中的后自增行为被定义为在计算完表达式后执行自增。

C 中的行为是未定义的,但通常遵循优先顺序。

注意:评估顺序和优先级是不同的,这对于后期递增/递减和快捷布尔运算更为明显。

例如

Sting s = null;

if (s == null || !(s.length() > 0))

在这种情况下,! 具有最高优先级,但实际上永远不会被评估,因为较低优先级 || 会阻止它。

优先级仅确定隐含括号的位置,但仅建议如何评估表达式。

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2013-11-23
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多