我试图理解面试问题的答案。
提供以下代码:
int x = 5;
int y = x++ * ++x;
What is the value of y?
答案显示为多项选择答案的列表,其中一个答案是 35 。
在我的机器上编写并运行此代码会导致 y 等于 35 。
因此,我希望将此问题的答案标记为 35 。
但是,由于x ++,这个表达式不是未定义的,即效果的一面(x的实际增量)可能随时发生,具体取决于编译选择编译代码的方式。
因此,我会不认为您可以肯定地说答案是 35 ,因为不同的编译器可能会产生不同的结果。
另一个可能的多选答案是30,我认为这也是可行的,即如果后增量副作用发生在序列点的最后端。
我没有答案密钥,因此很难确定最佳答案是什么。
这只是一个不好的问题还是答案更明显?
答案 0 :(得分:5)
你是对的;标准对此代码可能做的任何要求都没有任何要求。
如果这是一个需要您选择特定定义答案的多项选择题,那么 - 撰写问题的人并不像您那样理解C。当您决定是否接受要约时,请记住这一点。 : - )
答案 1 :(得分:2)
未定义的行为意味着 UNDEFINED ,有时可能是 EXPECTED 行为,它并不代表 DEFINED
也许他们希望你回答预期的行为,因为它是未定义的行为,所以没有。
答案 2 :(得分:0)
你是对的,这是未定义的。然而...
通常这些问题旨在让您思考,即使标准未定义,提问者也可能会查看您是否: