Это изобретательный способ эмулировать GOTO
, поскольку эти два практически идентичны:
// NOTE: This is discouraged!
do {
if (someCondition) break;
// some code be here
} while (false);
// more code be here
и:
// NOTE: This is discouraged, too!
if (someCondition) goto marker;
// some code be here
marker:
// more code be here
С другой стороны, обе эти должно действительно выполняться с помощью if
s:
if (!someCondition) {
// some code be here
}
// more code be here
Хотя вложенность может стать немного уродливой, если вы просто превратите длинную строку forward- GOTO
s в вложенные if
s. Настоящий ответ - правильный рефакторинг, хотя и не имитирующий архаичные языковые конструкции.
Если вы отчаянно пытались транслировать алгоритм с GOTO
s в нем, вы могли бы, вероятно, сделать это с этой идиомой. Это, конечно, нестандартный и хороший показатель того, что вы не придерживаетесь близко ожидаемых идиом языка.
Я не знаю ни одного языка C, где do / while является идиоматическое решение для чего угодно.
Вероятно, вы могли бы реорганизовать весь беспорядок во что-то более разумное, чтобы сделать его более идиоматичным и более читаемым.