Перш ніж прочитати решту цієї відповіді, будь ласка, прочитайте Заява про перехід до вважається шкідливою . Якщо ви не хочете читати його повністю, ось що я вважаю ключовим моментом:
Нестримне використання оператора go to має негайний наслідок того, що стає страшенно важко знайти значущий набір координат, в яких можна описати хід процесу.
Або, перефразовуючи, проблема gotoполягає в тому, що програма може прибути в середині блоку коду, без того, щоб програміст зрозумів стан програми на той момент. Стандартні конструкції, орієнтовані на блок, призначені для чіткого розмежування переходів стану, мітка breakпризначена для переведення програми в певний відомий стан (за межами міченого блоку, що містить).
У реальній імперативній програмі держава чітко не окреслена межами блоків, тому виникає сумнів, чи breakхороша ідея для мічених . Якщо блок змінює стан, який видно ззовні блоку, і є кілька точок для виходу з блоку, тоді мітка breakеквівалентна примітивуgoto . Різниця лише в тому, що замість шансу приземлитися в середині блоку з невизначеним станом ви починаєте новий блок із невизначеним станом.
Отже, загалом, я б вважав позначених breakяк небезпечні. На мій погляд, це ознака того, що блок повинен бути перетворений у функцію, з обмеженим доступом до охоплюючої області.
Однак цей прикладний код явно був продуктом генератора синтаксичного аналізатора (OP зауважив, що це вихідний код Xerces). А генератори синтаксичного аналізатора (або генератори коду загалом) часто беруть на себе свободу з кодом, який вони генерують, оскільки вони прекрасно знають стан, і людям не потрібно його розуміти.
label913визначено?