C++ 如何编写检查程序是否将终止的代码?

C++ 如何编写检查程序是否将终止的代码?,c++,C++,我现在的想法是只将主cpp文件作为输入,检查while循环、do-while循环、for循环和assert语句 我觉得还有更多的病例,这可能有点超出了我的想象 感谢您的帮助 众所周知,这个问题永远无法解决。 从数学上讲,.这就是所谓的停顿问题,并且已经被证明是不可能解决的 假设您有一个函数boolhaltsstring程序,它决定程序是否会停止。然后你可以写一个程序 if (halts(input)) { while (true); } 当且仅当其输入不存在时才会停止。因此,如果输入是

我现在的想法是只将主cpp文件作为输入,检查while循环、do-while循环、for循环和assert语句

我觉得还有更多的病例,这可能有点超出了我的想象


感谢您的帮助

众所周知,这个问题永远无法解决。
从数学上讲,.

这就是所谓的停顿问题,并且已经被证明是不可能解决的

假设您有一个函数boolhaltsstring程序,它决定程序是否会停止。然后你可以写一个程序

if (halts(input)) {
    while (true);
}
当且仅当其输入不存在时才会停止。因此,如果输入是这个程序,那么当且仅当它没有停止时,它才会停止,这是一个逻辑矛盾


因此,这样一个函数不可能存在。

你的意思是,你如何解决这个问题?你不能。不是完全一样,但答案是一样的。这段视频和同一频道的其他一些视频将帮助你理解这个问题:难道没有一组非常有限的程序可以证明它是否停止了吗?我在某个地方读到,将程序限制在一个设定的内存限制内,并且没有IO。你可以证明它是否停止。通过一次单步执行一条指令,并维护所有以前的状态存储器/寄存器。如果一个状态重复,它不会停止。我真的应该找到我从哪里读到的。你不能为一个任意的程序做这件事,但是如果你接受我放弃,你就有可能接近你的目的;我不知道或不终止作为一个有效的答案。尝试这样做是一个有趣的练习,它迫使你对计算进行长期而艰苦的思考,这是一件好事。+1但请在其他地方添加一个链接,例如CS.SX或其他讨论这个问题的网站。@einpoklum:为什么?这是一个问答网站,不是链接场。如果你想阅读更多,谷歌暂停问题。为OP提供更广泛的答案背景。这不仅仅是你想到的一个合乎逻辑的把戏。@einpoklum:他把问题的名字告诉了每个人,并解释得很好。进一步的研究是OP的责任。@einpoklum它并不完全是模糊的。当然,OP可能没有意识到停止的问题是什么,谷歌搜索检查程序是否会终止有一个维基百科文章的顶部链接。