有明确答案的未定义表达式?
Undefined expression with a definite answer?
我正在尝试理解面试问题的答案。
呈现如下代码:
int x = 5;
int y = x++ * ++x;
What is the value of y?
答案显示为多项选择答案列表,其中之一是 35。
在我的机器上写入和 运行 这段代码导致 y 等于 35.
因此我希望将这个问题的答案标记为 35.
但是,这个表达式不是由于 x++ 而未定义吗,即效果的一面(x 的实际增量)可能随时发生,具体取决于编译器选择编译代码的方式。
因此,我不会认为您可以肯定地说答案是35,因为不同的编译器可能会产生差异结果。
另一个可能的多项选择答案是 30,我认为这也是可行的,即如果 post 增量副作用发生在序列点的最末端。
我没有答案,所以很难确定最好的答案。
这只是一个糟糕的问题还是答案更明显?
未定义行为意味着 未定义,有时它可能是 预期 行为,并不意味着它是 已定义.
也许他们希望您回答预期的行为是什么,none 因为它是未定义的行为。
你是正确的,这是未定义的。然而...
通常这些问题旨在让您思考,即使没有标准定义,提问者也可能想看看您是否:
- 大多数时候都知道会发生什么 "in the real world"。 (我并不是说这很好,但我是说你会发现代码库中的结构如此糟糕,甚至更糟,你可能会被要求接管和维护。)
- 了解运算符优先级和运算顺序。
你是对的;标准对此代码可能做什么没有强加任何要求。
如果这是一个多项选择题,需要你选择一个特定的定义答案,那么——写这个问题的人对 C 的理解不如你。当您决定是否接受那里的报价时,请记住这一点。 :-)
我正在尝试理解面试问题的答案。
呈现如下代码:
int x = 5;
int y = x++ * ++x;
What is the value of y?
答案显示为多项选择答案列表,其中之一是 35。
在我的机器上写入和 运行 这段代码导致 y 等于 35.
因此我希望将这个问题的答案标记为 35.
但是,这个表达式不是由于 x++ 而未定义吗,即效果的一面(x 的实际增量)可能随时发生,具体取决于编译器选择编译代码的方式。
因此,我不会认为您可以肯定地说答案是35,因为不同的编译器可能会产生差异结果。
另一个可能的多项选择答案是 30,我认为这也是可行的,即如果 post 增量副作用发生在序列点的最末端。
我没有答案,所以很难确定最好的答案。
这只是一个糟糕的问题还是答案更明显?
未定义行为意味着 未定义,有时它可能是 预期 行为,并不意味着它是 已定义.
也许他们希望您回答预期的行为是什么,none 因为它是未定义的行为。
你是正确的,这是未定义的。然而...
通常这些问题旨在让您思考,即使没有标准定义,提问者也可能想看看您是否:
- 大多数时候都知道会发生什么 "in the real world"。 (我并不是说这很好,但我是说你会发现代码库中的结构如此糟糕,甚至更糟,你可能会被要求接管和维护。)
- 了解运算符优先级和运算顺序。
你是对的;标准对此代码可能做什么没有强加任何要求。
如果这是一个多项选择题,需要你选择一个特定的定义答案,那么——写这个问题的人对 C 的理解不如你。当您决定是否接受那里的报价时,请记住这一点。 :-)