具有明确答案的未定义表达?

时间:2015-05-30 22:07:16

标签: c undefined

我试图理解面试问题的答案。

提供以下代码:

int x = 5;

int y = x++ * ++x;

What is the value of y?

答案显示为多项选择答案的列表,其中一个答案是 35

在我的机器上编写并运行此代码会导致 y 等于 35
因此,我希望将此问题的答案标记为 35

但是,由于x ++,这个表达式不是未定义的,即效果的一面(x的实际增量)可能随时发生,具体取决于编译选择编译代码的方式。

因此,我会认为您可以肯定地说答案是 35 ,因为不同的编译器可能会产生不同的结果。

另一个可能的多选答案是30,我认为这也是可行的,即如果后增量副作用发生在序列点的最后端。

我没有答案密钥,因此很难确定最佳答案是什么。

这只是一个不好的问题还是答案更明显?

3 个答案:

答案 0 :(得分:5)

你是对的;标准对此代码可能做的任何要求都没有任何要求。

如果这是一个需要您选择特定定义答案的多项选择题,那么 - 撰写问题的人并不像您那样理解C。当您决定是否接受要约时,请记住这一点。 : - )

答案 1 :(得分:2)

未定义的行为意味着 UNDEFINED ,有时可能是 EXPECTED 行为,它并不代表 DEFINED

也许他们希望你回答预期的行为,因为它是未定义的行为,所以没有。

答案 2 :(得分:0)

你是对的,这是未定义的。然而...

通常这些问题旨在让您思考,即使标准未定义,提问者也可能会查看您是否:

  1. 大多数时候都知道“在现实世界中”会发生什么。 (我并不是说这很好,但是我说你会发现这些结构很糟糕,而且在代码库中可能会被要求接管和维护。)
  2. 了解运营商优先顺序和运营顺序。