我认为这个问题在网站上的其他问题不重复,因为其他人不会在C中使用此功能。
我很想知道为什么这个C程序没有给出编译时错误。为什么这个陈述有效。它有什么用途?
int main(int argc, char const *argv[])
{
int k = k;
return 0;
}
全局范围内没有k
。看起来好像k
的范围刚好在赋值运算符之后。我很困惑。
答案 0 :(得分:3)
int i = i;
定义使用(右侧的未初始化值)i
(相同的变量)初始化(左)i
。
这当然是未指明的行为,可能是undefined behavior。
实现当然不会总是检测到未定义的行为(总是可靠地检测它们可以证明等同于halting problem)。
但你真的应该是scared未定义的行为。你有责任避免它。