是否应为所有整数类型提供函数变体?

时间:2012-02-10 16:45:51

标签: c coding-style

我正在使用C库中的一个函数,该函数将一个数字作为参数。目前,这意味着我有两个版本,一个用于double,另一个用于int

我应该为数字类型提供哪些版本的函数?

通常在标准库中看到这一点,但它们不够一致,无法使用指南,例如atofatolatoi是一套,strtodstrtolstrtoul是不同的集合abslabs是第三个。这是三个不同的集合,不同的命名方案都在同一个头文件中。

编辑:

这不是一次性使用,我不知道需要哪些变体。

理想情况下它会支持每一个标准变体,所以用strto*函数的样式编写三个并让用户在需要的地方提升类型就足够了吗?

3 个答案:

答案 0 :(得分:3)

您是否需要更多功能变体?

我怀疑,鉴于需要提出这个问题,您只需要doubleint这两个函数。例如,如果您真的需要支持double complex,请构建一个专门的函数来处理它。

答案 1 :(得分:1)

要回答这个问题,我认为我们需要了解更多有关相关功能的内容。作为一般规则,我最多只提供一个浮点和一个整数版本,除非它对于获得处理较小类型的好处的性能至关重要。 int是一个非常糟糕的选择。我会使用longlong longintmax_tuintmax_t,具体取决于您是否要支持C89,您在项目中使用类型的约定以及签名要求。或者,您可以创建自己的类型mylib_intarg,以便更改使用的基础类型,但为了理智, 不要鼓励您的用户库用这些丑陋的类型声明变量。相反,只需将它们作为函数的参数类型,以便调用者使用任何自然的变量类型。

答案 2 :(得分:1)

将其实现为C ++函数模板并添加一个C包装器,这样当您需要支持说long longlong double时,只需添加另一个C包装器,您的C ++算法模板就会保持原样并且您不会不需要记住细节。