static int
MyReplacementExit(ClientData unused, Tcl_Interp *interp, int argc, const char *argv[])
{
// Tcl_DeleteInterp(interp);
// Tcl_Finalize();
return TCL_OK;
}
int main() {
Tcl_Interp *interp = Tcl_CreateInterp();
Tcl_CreateCommand(interp, "exit", MyReplacementExit, NULL, NULL);
Tcl_Eval(interp, "exit ; puts 11111111");
std::cout << "22222222222" << std::endl;
return 0;
}
我需要处理的TCL解释的exit
命令评价。默认情况下,它试图删除自己还呼吁std::exit
封闭整个program.It是不是我想要的,所以我想通过自定义PROC来取代它。我不需要在退出处理程序proc中删除解释器(以后我可以这样做),只需要它不会在exit
命令后继续执行求值命令。如何让tcl解释器在退出命令后不再继续?
在这段代码中,我需要改变MyReplacementExit
PROC不知何故,所以11111111
不进行打印,但 22222222222
并打印。
它可以通过从MyReplacementExit
proc返回TCL_ERROR
来实现,但是我无法区分其他错误情况。
你尝试调用['Tcl_CancelEval'](http://www.tcl.tk/man/tcl8.6/TclLib/Cancel .htm)从你的'exit'替换? – 2013-04-26 16:30:19
@JohannesKuhn这可能是一个解决方案,但我的TCL版本是8.4,它不支持Tcl_CancelEval – Ashot 2013-04-26 16:36:20
有关MyReplacementExit返回TCL_BREAK或TCL_CONTINUE什么?它会在你重新定义的“退出”之后跳过执行命令吗? – 2013-04-26 17:02:34