【发布时间】:2014-07-28 05:30:00
【问题描述】:
我想知道 C 中是否有某种方法可以内省类型的最大值。
例如,我有一个名为 a 的变量,它是一个 unsigned short...
{
unsigned short a;
long long max = TYPEOF_MAX(a);
/* now max will be USHRT_MAX */
}
{
signed char a;
long long max = TYPEOF_MAX(a);
/* now max will be CHAR_MAX */
}
TYPEOF_MAX 是一个宏,它使用某种方法根据 in 类型(静态)获取范围。
其他限定词...
- 如果仅限于几种类型,则可以,例如
char/short/int/long/long long/float/double - 这可能需要使用一些 C 扩展、GCC 甚至可能是 C11,但更可移植的方法是首选。
注意:这是用于生成的代码,显然包括 <lmits.h> 和使用 USHRT_MAX 和 CHAR_MAX 在几乎所有情况下都可以正常工作。
【问题讨论】:
-
#include <limits.h>然后使用INT_MAX等。如果你有一个非内置但无符号类型T,你也可以使用((T)-1)来获取最大值。 -
和?我把它作为答案发布了吗?
-
C11 已经 3 岁了...你越早在其中编写代码,人们就会越早不再认为它是什么奇怪的东西。事实上,这是选择 C11 解决方案的一个很好的理由。如果它不起作用,请向您的编译器供应商发送错误。
标签: c types c-preprocessor