Невозможно напрямую вернуться к чему-либо, кроме непосредственного вызова функции (в данном случае B), если вы не используете longjmp
, что, я считаю, не рекомендуется в C ++.Однако если причина, по которой вы хотите пропустить B, состоит в том, что ошибка произошла в C, и ошибка может быть обработана только A, вы можете использовать исключения (предупреждение: неполный пример; мой C ++ становится ржавым):
#include <stdexcept>
void A() {
try {
B();
}
catch (std::exception& e) {
// You'll get here if C throws
}
}
void B() {
C();
}
void C() {
if (someCondition)
return; // Sends you to B
else
throw std::exception; // Sends you to A since B does not contain a try/catch
}
Но, пожалуйста, не используйте исключения для регулярного (не исключительного) потока управления;используйте его только для фактических ошибок.