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

C 是否应为所有整数类型提供函数变量?,c,coding-style,C,Coding Style,我正在使用C库中的一个函数,该函数将数字作为参数。目前这意味着我有两个版本,一个用于double,另一个用于int 我应该为数字类型提供哪些版本的函数 这在标准库中很常见,但它们不够一致,无法使用指南,例如atof,atol和atoi是一个集合,strtod,strtol,strtoul是另一个集合,abs,labs是第三个集合。这是三个不同的集合,在同一个头文件中有不同的命名方案 编辑: 这不是一次性使用,我不知道需要什么变体 理想情况下,它将支持每一个标准变体,因此以strto*函数的样式编

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

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

这在标准库中很常见,但它们不够一致,无法使用指南,例如
atof
atol
atoi
是一个集合,
strtod
strtol
strtoul
是另一个集合,
abs
labs
是第三个集合。这是三个不同的集合,在同一个头文件中有不同的命名方案

编辑:

这不是一次性使用,我不知道需要什么变体


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

您需要更多的函数变体吗?


我猜想,考虑到这个问题,您只需要一个
double
和一个
int
,这两个函数。例如,如果您确实需要支持一个
双复数
,请构建一个专门的函数来处理它。

您需要更多的函数变体吗?


我猜想,考虑到这个问题,您只需要一个
double
和一个
int
,这两个函数。例如,如果您确实需要支持一个
双复数
,请构建一个专门的函数来处理这个问题。

要回答这个问题,我认为我们需要了解更多有关函数的功能。一般来说,我最多会提供一个浮点和一个整数版本,除非它对于获得处理较小类型的好处非常关键<但是code>int是一个非常糟糕的选择。我会使用
long
long
intmax\t
uintmax\t
,这取决于您是否希望支持C89、关于在项目中使用类型的约定以及签名要求。或者,您可以创建自己的类型
mylib\u intarg
,允许您更改所使用的底层类型,但是出于理智的考虑不要鼓励库用户使用这些丑陋的类型声明变量。相反,只需将它们作为函数的参数类型,以便调用者使用任何自然的变量类型。

要回答这个问题,我认为我们需要了解更多有关函数的功能。一般来说,我最多会提供一个浮点和一个整数版本,除非它对于获得处理较小类型的好处非常关键<但是code>int是一个非常糟糕的选择。我会使用
long
long
intmax\t
uintmax\t
,这取决于您是否希望支持C89、关于在项目中使用类型的约定以及签名要求。或者,您可以创建自己的类型
mylib\u intarg
,允许您更改所使用的底层类型,但是出于理智的考虑不要鼓励库用户使用这些丑陋的类型声明变量。取而代之的只是让它们成为函数的参数类型,这样调用方就可以使用任何自然类型的变量。

< P>实现它作为C++函数模板并添加C包装器,这样当你需要支持时,说“代码>长long < /COD>或<代码> long double < /代码>你只需添加另一个C包装器,你的C++ AlgO模板保持完整,不需要记住细节。

< P>将它作为C++函数模板实现并添加C包装器,这样当你需要支持时说“代码>长long < /COD>或 long double < /代码>你只需添加另一个C包装器,你的C++ ALGO模板保持完整,你不需要记住细节。

除非你有需要,否则一对浮动/整数就足够了。除非你有需要,否则一对浮动/整数应该足够了。这是一个通用的库,它将被打包并保存为几个不同项目的二进制文件。目前我不知道所有项目的要求,但我不想在我忘记了我正在使用的各种方法和算法的情况下重写它。请阅读我对问题的编辑以进行澄清。@R..,是的,只要您可以改装功能。或者你可以第一次就做对,再也不看代码了。我非常害怕再也不看的代码。看看gnu m4中的gnulib代码,看一个可怕的例子。。。它已经15年多没有被触碰过了,而且它充满了刺穿每个已知系统的
文件
结构内部的黑客攻击……这是针对一个通用库的,它将被打包并作为二进制文件保存在几个不同的项目中。目前我不知道所有项目的要求,但我不想在我忘记了我正在使用的各种方法和算法的情况下重写它。请阅读我对问题的编辑以进行澄清。@R..,是的,只要您可以改装功能。或者你可以第一次就做对,再也不看代码了。我非常害怕再也不看的代码。看看gnu m4中的gnulib代码,看一个可怕的例子。。。它已经15年多没有被触碰过了,而且它充满了刺穿每个已知系统
文件
结构内部的黑客攻击。。。