【发布时间】:2014-01-22 10:45:54
【问题描述】:
SuSv3 要求ssize_t 是有符号整数类型。如果我想检查我计算的值是否大于此类数据类型允许的最大值,我可以将其与INT_MAX 进行比较,这不太好。
有没有一种更便携的方式可以完成这种比较 - 一个宏/函数f,就像在
f(<typedef'ed datatype>) = {maximum value allowed for <TDDT> on this system)?
,还是短序列的这样的操作相同的排序?
系统:
Ubuntu 12.04.
glibc 2.15
内核 3.2.0
P.S.:在谷歌上搜索时,我首先认为 gcc 扩展“typeof”听起来很有希望;但它似乎在这里没有帮助(或者是吗?)。这就是说我可以接受任何可能是 gcc 扩展/属性/等的东西。
【问题讨论】:
-
"我可以将它与 INT_MAX 进行比较,这不太好。" 为什么?还是您指的是与
INT_MAX进行比较以测试该值是否适合ssize_t?这确实不太好,因为应该使用-((SIZE_MAX+1)/2-1)。 -
@alk:也许我的想法有缺陷,但我的意思是保持与 SuS 标准(或其继任者)可能需要的 ssize_t 的任何未来变化(这显然只是一个示例数据类型) .似乎不太可能发生变化,但是如果在未来的修订版中 typdef int ssize_t (同样,显然只是一个例子)怎么办?我正在通过 Kerrisk 以我的方式工作,这个问题浮现在我的脑海中。或者,在这种情况下,标准 API 编码会使用 INT_MAX 吗?
-
...我的意思是输入 typedef unsigned int ssize_t...
-
如果您需要特定的位宽,请坚持使用
u/intXY_t整数类型,因为它们的宽度是明显且恒定的,因此您不需要使用 MIN/MAX 宏。对于像s/size_t、u/intprt_t、ptrdiff_t这样的其他人来说,位宽并不重要,因为它们被明确引入以解决位宽问题。所以请原谅,但我真的不明白你的问题的重点。
标签: c++ c typedef type-conversion sus