【发布时间】:2019-11-23 01:08:29
【问题描述】:
我正在评估代码并在 C 和 Java 中获得不同的输出。 由于它是一个表达式,因此必须在两种语言中生成相同的输出。但跑步时就不是这样了。
以下是代码示例和更多说明
C:
案例一:
int a=101;
printf("%d,%d", ++a,a);
输出= 102,102
案例 2:
int a=101;
printf("%d,%d,%d", ++a,a,a--);
输出 = 101,101,101
Java:
int a=101;
System.out.print( ++a +"," + a + "," + a--);
输出 = 102,102,102
对于像 Java 这样的 C 语言中的第二种情况,我希望输出为 102,102,102。但是输出是 101,101,101
【问题讨论】:
-
在 C 中,即undefined behavior。
-
“因为它是一个表达式,所以必须在两种语言中生成相同的输出”不正确
-
每个问题应该问一个问题。是的,您的第一个假设存在严重缺陷:两种语言允许相同的语法这一事实并不意味着语义相同。德语单词 pass 的写法类似于英语的“pass”,但在这两种不同的语言中它们的含义不同!
-
有关这些 C 表达式的完整故事,请参阅this canonical question and answer。
标签: java c operators increment decrement