глупый программистский вопрос
Apr. 12th, 2003 03:04 pm(только программистам интересно, наверное)
Почему в процедуральных языках, как правило, нет оператора досрочного выхода из блока? Как break в C, но чтобы работал не только из циклов, а также внутри if-then или вообще любого блока.
Постоянно приходится делать глупые вложенные цепочки условий или некрасивые трюки типа while(1) и выполза по break'у (ну или, понятно, их аналоги в других языках).
Есть какая-то глубокая причина этому?
Почему в процедуральных языках, как правило, нет оператора досрочного выхода из блока? Как break в C, но чтобы работал не только из циклов, а также внутри if-then или вообще любого блока.
Постоянно приходится делать глупые вложенные цепочки условий или некрасивые трюки типа while(1) и выполза по break'у (ну или, понятно, их аналоги в других языках).
Есть какая-то глубокая причина этому?
no subject
Date: 2003-04-12 03:04 pm (UTC)Это смотря как делать. Идея бинарного флажка-переключателя между старым и новым поведением просто очевидна. А в gcc, например, этот флажок тернарный: по умолчанию он компилирует и новые, и старые программы, выдавая warning на старый for scoping.
Отсутствие же такого флажка вообще, напротив, делает кучу новых программ некомпилируемыми :-)
О портабельности же, 100% за то, что они заботятся меньше всего на свете.
В общем согласен. Есть однако тонкости.
Куча библиотечных функций underscored.
Это обстоятельство явно отчасти вызвано излишне буквальной и тупой любовью к стандартам. Например, определение функции snprintf() в stdio.h явно нарушает ANSI C89; определение же там _snprintf() никакого стандарта не нарушает... По хорошему же единственное назначение стандартов -- это портабельность (а так можно было бы писать на VB или еще чем-нибудь домотканном). В области же формального соблюдения стандартов Microsoft вообще говоря не так уж и плох (полное следование всем формальностям вообще не так часто встречается...)