【发布时间】:2011-03-22 09:53:57
【问题描述】:
int foo(int c){
return c;
}
int main(void){
int a=5,c;
c = foo(--a) + a;
}
它会在 C/C++ 中调用未定义的行为吗?我认为不会。
阅读所有答案后,我无法弄清楚这是未定义的行为还是未指定的行为。
【问题讨论】:
-
不,它不会,因为它不会编译。 (分号在哪里!)
-
stackoverflow.com/questions/4176328/… 有很多关于这方面的信息。
-
除非你实现了一个编译器,或者一个编译器测试套件,或者你的公司雇佣了一群语言律师,否则我会怀疑你是否需要知道这一点。是的,SO 上有几个人可以回答这个问题(你可以在 Usenet 上的
comp.lang.c++.moderated和comp.std.c++上找到更多信息),但人数并不多,甚至他们有时也会对微妙的极端情况持不同意见。更重要的是,(某些)编译器也可能不同意它们。如果代码不够清晰,看一眼,一个经验丰富的程序员可能会说“是的!”或“不!”,简化它并完成。 -
我回答错了来证明一个观点:)
-
@Matt:你的回答让我吃惊!让我跳入我的 FCD 副本以检查我是否没有跳过某些内容! @Erik 正在报道我们 :)
标签: c++ c undefined-behavior