当它实际上无效时返回 int 的原因是什么?
What is the reason for returning int when it's actually void?
我在 Linux 内核源代码中遇到了一些奇怪的(对我来说)代码。有xt_register_target()
函数:
int xt_register_target(struct xt_target *target)
{
u_int8_t af = target->family;
mutex_lock(&xt[af].mutex);
list_add(&target->list, &xt[af].target);
mutex_unlock(&xt[af].mutex);
return 0;
}
EXPORT_SYMBOL(xt_register_target);
这是一个 API 函数。所以看起来它必须有一些明显的(对于 API 用户)它的值 returns 的原因。但是这个函数没有可变性——它总是 returns 0。所以基本上它是 void
.
这种 API 编码模式的原因是什么?这是最佳做法还是错误?
深入研究 git 历史,似乎这个函数以前确实有失败条件,但这些条件后来在 this commit 中被删除了。
因此,保持函数的实现相同以防止更改调用函数是有意义的。
我在 Linux 内核源代码中遇到了一些奇怪的(对我来说)代码。有xt_register_target()
函数:
int xt_register_target(struct xt_target *target)
{
u_int8_t af = target->family;
mutex_lock(&xt[af].mutex);
list_add(&target->list, &xt[af].target);
mutex_unlock(&xt[af].mutex);
return 0;
}
EXPORT_SYMBOL(xt_register_target);
这是一个 API 函数。所以看起来它必须有一些明显的(对于 API 用户)它的值 returns 的原因。但是这个函数没有可变性——它总是 returns 0。所以基本上它是 void
.
这种 API 编码模式的原因是什么?这是最佳做法还是错误?
深入研究 git 历史,似乎这个函数以前确实有失败条件,但这些条件后来在 this commit 中被删除了。
因此,保持函数的实现相同以防止更改调用函数是有意义的。