C - fts_open 的 "compar" 参数应该有多稳健?

C - How robust should the "compar" argument to fts_open be?

fts_open 定义为 on the man page 将比较函数作为参数。虽然我知道将错误检查放入函数中是一种很好的做法,但函数的实际期望是什么? FTS 会提供空值作为参数还是会自行检查?

FTS 将仅使用有效指针调用您的函数。即,给定:

int my_compar(const FTSENT **ppx, const FTSENT **ppy) { ... }

ppx有效,*ppx有效,**ppx有效(ppy同理)。

唯一需要注意的是 **ppx**ppy FTSENTfts_accpathfts_pathfts_pathlen 字段不得被访问。


关于一般错误检查:您无法检查指针是否有效。您可以检查空指针,但不能检查未初始化的值、目标不再存在的指针 ("dangling") 等。因此您可以进行的检查无论如何都非常有限。

对于函数参数,调用者有责任提供有效值。在这种情况下,"caller" 是 fts_open。它的描述只说“[compar 函数] 将两个指向 FTSENT 结构的指针作为参数 ”,意思就是它将传递的内容。如果它希望您处理空指针(或指向空指针的指针),文档会明确说明。