В следующем C-коде f
звонки g
и g
звонки h
. Обратите внимание, что goto
в h
, однако: он вернется к f
, если a
удовлетворяет определенному условию.Состояние стека после goto
void h(int a)
{
if (a > 10)
goto out;
}
void g(int a, int b)
{
h(a);
}
void f(int a, int b)
{
g(a, b);
return;
out:
printf("b: %d\n", b);
}
Мой вопрос: как стопка будет, если goto
срабатывает? Будут ли оставлены g
и h
? И будет f
еще напечатать правильное значение b
? (или он будет печатать его правильно только в некоторых случаях, когда мне повезет?)
(Пожалуйста, я не хочу обсуждать, является ли это хорошей практикой или если это вообще нужно использовать. что фактический код достаточно сложный, так что компилятор не будет достаточно умен, чтобы, например, оптимизировать g
)
[Я могу дать подробную информацию о том, почему я это делаю, если это имеет значение - я не знаю думаю, что делает]
Этикетки AFAIK должны быть локализованы для функциональной области. Вы не можете сделать это в стандарте C. – LPs
Ваш код не скомпилирован для меня, например, состояния комментариев к файлам LP, gotos являются локали для функций областей –
Возможный дубликат [Как «перейти» в другую функцию в c?] (Http : //stackoverflow.com/questions/21355110/how-to-goto-into-different-function-in-c) – LPs