Tcl_CancelEval 声明在 TCL 8.6.4 中被破坏了吗?
is Tcl_CancelEval declaration broken in TCL 8.6.4?
在 TCL 8.6.4 发行版中,tclDecl.h 中 CancelEval 的声明是
int Tcl_CancelEval(Tcl_Interp *, Tcl_Obj *, ClientData, int);
但是文档说声明是
int Tcl_CancelEval(Tcl_Interp *, ClientData, int);
在我的代码中,第一个生成分段违规。我现在正在使用一种解决方法来使用第二个,第二个 arg = 0。这是正确的吗?
天哪!文档是错误的,至少从 2010 年就开始了。我可以进一步追查,但我猜文档和代码从来没有匹配过;在迄今为止的所有其他 8.6 版本中,它都存在同样的错误。我们非常努力地避免犯这些错误,但它们有时会偷偷溜走。现在已经修复了;它将构成下一个版本的一部分(以及下一个在线文档构建,它往往与版本同步)。
第二个参数使用0(或NULL
)确实可以接受;它使系统使用默认的错误消息。如果您使用了 non-NULL 参数,它将是要使用的错误消息,并且会在此过程中减少其引用计数(这是不寻常的 API 行为,因此值得注意)。
在 TCL 8.6.4 发行版中,tclDecl.h 中 CancelEval 的声明是
int Tcl_CancelEval(Tcl_Interp *, Tcl_Obj *, ClientData, int);
但是文档说声明是
int Tcl_CancelEval(Tcl_Interp *, ClientData, int);
在我的代码中,第一个生成分段违规。我现在正在使用一种解决方法来使用第二个,第二个 arg = 0。这是正确的吗?
天哪!文档是错误的,至少从 2010 年就开始了。我可以进一步追查,但我猜文档和代码从来没有匹配过;在迄今为止的所有其他 8.6 版本中,它都存在同样的错误。我们非常努力地避免犯这些错误,但它们有时会偷偷溜走。现在已经修复了;它将构成下一个版本的一部分(以及下一个在线文档构建,它往往与版本同步)。
第二个参数使用0(或NULL
)确实可以接受;它使系统使用默认的错误消息。如果您使用了 non-NULL 参数,它将是要使用的错误消息,并且会在此过程中减少其引用计数(这是不寻常的 API 行为,因此值得注意)。