Tcl 8.6.4中是否违反了Tcl_CancelEval声明?

Tcl 8.6.4中是否违反了Tcl_CancelEval声明?,tcl,Tcl,在TCL 8.6.4发行版中,tclDecl.h中CancelEval的声明是 int Tcl_CancelEval(Tcl_Interp *, Tcl_Obj *, ClientData, int); 但文件上说,这项声明是错误的 int Tcl_CancelEval(Tcl_Interp *, ClientData, int); 在我的代码中,第一个生成一个分段冲突。我现在使用一个变通方法来使用第二个参数,第二个参数为0。这对吗?哦,天哪!这些文件是错误的,至少从2010年起就一直存在。

在TCL 8.6.4发行版中,tclDecl.h中CancelEval的声明是

int Tcl_CancelEval(Tcl_Interp *, Tcl_Obj *, ClientData, int);
但文件上说,这项声明是错误的

int Tcl_CancelEval(Tcl_Interp *, ClientData, int);

在我的代码中,第一个生成一个分段冲突。我现在使用一个变通方法来使用第二个参数,第二个参数为0。这对吗?

哦,天哪!这些文件是错误的,至少从2010年起就一直存在。我可以追溯到更远的地方,但我猜文档和代码从未匹配过;到目前为止,在所有其他8.6版本中都是错误的。我们尽最大努力避免犯这种错误,但有时它们会偷偷溜过去。这个问题现在已经解决了;它将成为下一个版本的一部分(下一个文档构建将上线,这往往与发布同步)


第二个参数使用0(或
NULL
)确实是可以接受的;它使系统使用默认错误消息。如果您使用了非NULL参数,那么它将是要使用的错误消息,并且会在过程中减少其引用计数(这是不寻常的API行为,因此值得注意)。

感谢您在这里提出这个问题。像这样的文档错误是我们试图避免的…tclDecls.h本身是从另一个文件tcl.decls编译而来的,该文件声明tcl_CancelEval如下:
int tcl_CancelEval(tcl_Interp*Interp,tcl_Obj*resultObjPtr,ClientData ClientData,int标志)