gpt4 book ai didi

c++ - goto语句在C++中的用法

转载 作者:行者123 更新时间:2023-11-27 23:09:31 30 4
gpt4 key购买 nike

我有一个 funcA 我每毫秒调用一次。由另一个 funcB。我想使用 goto 语句。但是当我查看流程时(当m_tempdata 不是NULL 时),在打印"stage 2" 之后,它也在打印 “清理开始”。通常,我希望在为下一回合打印 "stage 2" 后返回。我错了吗?

void ClassA::funcA()
{
m_tempdata = m_freedata;

printf("stage 1 \n");

if (NULL == m_tempdata)
{
printf("going cleaning \n" );
goto cleanup;
}
m_freedata = m_tempdata->next;

printf("stage 2 \n");

cleanup: printf("cleanup starts \n");
// ... some additional work todo
}

最佳答案

Normally, I expect to return after printing "stage 2" for the next turn. Am I wrong?

是的,你错了

在没有跳转到标签的情况下,代码将简单地跳转到它并继续。标签不是说明。它不会导致程序神奇地返回或跳转到其他地方。

这里有一个更好的写法:

void ClassA::funcA()
{
m_tempdata = m_freedata;

printf("stage 1 \n");

if (NULL == m_tempdata)
{
printf("going cleaning \n" );
Cleanup();
return;
}

m_freedata = m_tempdata->next;
}

void ClassA::Cleanup()
{
printf("cleanup starts \n");
// ... some additional work todo
}

请不要使用goto。它使代码更难理解、调试和维护。另外,您最终会犯下像您在这里所做的愚蠢错误,因为您之前做出了糟糕的设计决策。请改用现代流量控制结构。

关于c++ - goto语句在C++中的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189259/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com