如何使uint8_t,uint16_t,uint32_t,int8_t,int16_t,int32_t和float_t的通用函数如下所示?C类型双引号问题
我不喜欢在每种情况下重复相同的逻辑,因为你可以看到。每种情况唯一的区别是铸造。
我理想上喜欢一种遵循C标准的便携式解决方案。任何想法都欢迎。
谢谢。
static bool_t IsWithinLimits(const dbKey_t *key, const void *data)
{
bool_t isWithinLimits = TRUE;
limits_t limits = getDefinedLimits(key);
switch(key->type)
{
case TYPE_UINT8:
if((*(const UINT8*)data > (UINT8)limits.max) || (*(const UINT8*)data < (UINT8)limits.min))
{
isWithinLimits = FALSE;
}
break;
case TYPE_UINT16:
if((*(UINT16*)pData > (UINT16)limits.max) || (*(UINT16*)data < (UINT16)limits.min))
{
isWithinLimits = FALSE;
}
break;
case TYPE_UINT32:
...
break;
case TYPE_INT8:
...
break;
case TYPE_INT16:
...
break;
case TYPE_INT32:
...
break;
case TYPE_FLOAT:
...
break;
}
return isWithinLimits;
}
怎么可以这样'*(* UINT16)的pData>(UINT16)limits.Max'是有史以来真的吗? – 2011-06-16 07:41:05
@Let_Me_Be:我想'limits.max'不一定总是65535! – 2011-06-16 07:43:14
这是正确的,每个键都有自己的一组定义的最小/最大限制。 – thegreendroid 2011-06-16 07:47:38