【发布时间】:2016-08-14 06:48:50
【问题描述】:
在 Eclipse 中构建以下代码时,我得到的 void 值没有被忽略,通常当我们期望函数返回 void 的值时会遇到此错误。但在这里我没有使用任何函数,我使用的是 void 指针。 代码如下:
typedef struct MessageName_T
{
MPM_ParameterName_t parameterName;
uint32_t minRange;
uint32_t maxRange;
bool_t isInRange;
DataType_t dataType;
bool_t isValueNa;
void* const data;
}MessageName_t ;
MessageName_t messagefr[3] =
/* Parameter, Minimum, Maximum, isInRange dataType isValueNa data*/
{
{ Parameter, Minimum, Maximum, isInRange, dataType, isValueNa, &stuctureA.data1},
{ Parameter1, Minimum1, Maximum1, isInRange1, dataType1, isValueNa1, &stuctureA.data2},
{ Parameter2, Minimum2, Maximum2, isInRange2, dataType2, isValueNa2, &stuctureA.data3}
}
void rangecheck(int index)
{
if(messagefr[index].isValueNa == FALSE)
{
if(*(messagefr[index].data) >= (messagefr[index].minRange) &&
*(messagefr[index].data) <= (messagefr[index].maxRange))
{printf("N");
messagefr[index].messagefr=TRUE;
}
else
{printf("Y");
messagefr[index].isInRange =FALSE;
}
}
else
{
NOP();
}
}
在*(messagefr[index].data) >= (messagefr[index].minRange) 行中,错误“未按应有的方式忽略空值”即将出现。
数据是空指针,我将其分配为&stuctureA.data1 的值。
现在在访问这些数据信息时,即*(messagefr[index].data),我得到了错误,如果我使用(messagefr[index].data),我得到了分配给数据的地址。
【问题讨论】:
-
1) 对
NOP()的调用完全是什么都不做。建议删除封闭的else代码块。 2) 字段isInRange定义为包含false或true,但是,代码与FALSE进行比较 3)MessageName_t结构中的几个字段类型未定义。为了为您调试,发布的代码需要涵盖所有细节,而不是来自更大代码块的一些 sn-p。 -
为了便于我们人类阅读和理解:1) 遵循公理:每行只有一个语句,并且(最多)每个语句一个变量声明。 2) 始终如一缩进代码。在每个左大括号 '{' 后缩进。在每个右大括号 '}' 之前取消缩进,建议每个缩进为 4 个空格,因为这足够宽,即使使用可变宽度字体也可以看到。
-
关于这种行:
messagefr[index].messagefr=TRUE;,没有字段名为:messagefr。建议 1) 指出哪一行给您带来了问题,发布实际完整的错误消息,发布所有“本土”数据类型的定义。 -
结构定义中的这一行:
void* const data;应该是int * data -
1)其他部分由于我必须遵循的编码标准而被保留,2) 如果我收到的值为 NA 即 2^n ,则将其与 false bcoz 进行比较,其中 n 是数据类型,然后无需检查它是否在范围内 3) 代码保存在这里的时间太长了,这就是 sn-p 的原因。我正在使用 void* const 数据,因为我得到的信息并不总是 int,它可以是 uint8、uint16、int32、float64 等。因此是 void poonter
标签: c pointers void-pointers dereference mingw32