假设我有一个如下所示的 C API:
// configure various parameters
int set_option(const char* name, const char* value);
// callback invoked during long running operation
typedef int (*callback_t)(void* whatever);
// start a long running operation
int some_long_operation(callback_t callback);
这些函数被记录为不可重入。我应该尝试强制执行此操作(例如,通过在某处设置标志并返回适当的错误代码)还是应该将 if off 写为未定义的行为?我见过的大多数代码都没有尝试这样做。我只是想知道这是一个有意识的决定还是只是实用主义(或者可能是懒惰)。在我看来,如果你想编写真正健壮的代码,你可能会尝试这样的事情;另一方面,如果您不遵循文档,那么可能所有的赌注都应该取消。
作为负责维护 SDK 的团队的一员,我的经历有时很可怕。尽管我们的文档不是很好,但我在 OEM 支持请求中看到了一些非常奇怪的东西。其中很大一部分源于在另一个函数调用的回调上下文中调用函数。其中大部分都被记录为不受支持,但我们没有任何代码来防止它;事实上,这种情况的大多数情况似乎都有效,但有些情况实际上可能会破坏我们的内部状态。似乎有时强制使用正确的 API 比依靠人们阅读文档更容易。