在 C 中使用静态成员函数指针作为 C API 回调会引发对安全性和可移植性的担忧。虽然这种做法最初可能会起作用,但由于类静态函数经常采用与 C 函数相同的调用约定,因此根据 C 标准,它被认为是不安全且不可取的。
根据标准 (3.5/10 ),“引用给定对象或函数的所有声明指定的类型应相同。”但是,如果采用静态成员函数作为回调目标,则使用 C 语言绑定的回调代码将需要具有不同语言链接的函数。正如标准 (7.5/1) 中所定义的,“具有不同语言链接的两个函数类型是不同的类型,即使它们在其他方面相同。”
因此,静态成员函数和 API 回调必须共享相同的类型语言联动。为了确保安全性和可移植性,强烈建议在 C 代码中将 C ABI 回调声明为“extern "C"”。
以上是## 静态成员函数指针作为 C API 回调:安全性和可移植性困境?的详细内容。更多信息请关注PHP中文网其他相关文章!