编译问题,出现警告: 运算结果可能是未定义的

Andyi 2009-02-12 09:48:30
编译时出现以下提示
./server/mapping2.cpp: In member function 'void CMapping::save_svalue(CMapping::svalue_s*,char**)':
./server/mapping2.cpp: 1129: 警告: 'elt' 上的运算结果可能是未定义的



void CMapping::save_svalue(svalue_t *v, char **buf)
{
switch(v->type)
{
case T_STRING:
{
register char *cp = *buf, *str = v->u.string;
char c;

*cp++ = '"';
while ((c = *str++))
{
if (c == '"' || c == '\\') {
*cp++ = '\\';
*cp++ = c;
}
else *cp++ = (c == '\n') ? '\r' : c;
}

*cp++ = '"';
*(*buf = cp) = '\0';
return;
}

case T_ARRAY:
{
const char * ptr = v->u.arr->GetBuffer();
while(* ptr)
*(*buf)++ = *ptr++;

*(*buf) = '\0';
return;
}

case T_NUMBER:
{
int res = v->u.number, fact, len = 1, neg = 0;
register char *cp;

if (res < 0)
{
len++, neg = 1, res = (-res) & 0x7fffffff;
}
fact = res;
while (fact > 9) { fact /= 10; len++; }
*(cp = (*buf += len)) = '\0';
do
{
*--cp = res % 10 + '0';
res /= 10;
} while (res);
if (neg) *(cp-1) = '-';
return;
}

case T_MAPPING:
{
int j = v->u.map->table_size;
mapping_node_t **a = v->u.map->table, *elt;

*(*buf)++ = '(';
*(*buf)++ = '[';
do {
for (elt = a[j]; elt; elt = elt = elt->next) '此行是1129行
{
save_svalue(elt->values, buf);
*(*buf)++ = ':';
save_svalue(elt->values + 1, buf);
*(*buf)++ = ',';
}
} while (j--);

*(*buf)++ = ']';
*(*buf)++ = ')';
*(*buf) = '\0';
return;
}
}
}
...全文
448 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
waizqfor 2009-02-12
  • 打赏
  • 举报
回复

for (elt = a[j]; elt; elt = elt = elt->next)//LZ多写了一个elt=

别的错误就看出来了
yutaooo 2009-02-12
  • 打赏
  • 举报
回复

挺好的呀。为什么会未定义行为?

为什么是:

elt = elt = elt->next


而不是:

elt = elt->next



不明白,关注!

biosli 2009-02-12
  • 打赏
  • 举报
回复
又循环又递归?没法优化了么?
Andyi 2009-02-12
  • 打赏
  • 举报
回复
yuzl32 2009-02-12
  • 打赏
  • 举报
回复
mapping_node_t *elt
for (elt = a[j]; elt; elt = elt = elt->next)
---------------
for语句中的第二个elt是作为一个表达式的值出现的,该值为TRUE或FALSE。而mapping_node_t类型表现不来

可以改为:
for (elt = a[j]; elt!=NULL; elt = elt = elt->next)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧