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