_IvanaПриведите пример на другом, нелюбимом вами языке, в котором эта простая вещь делается красиво. Чтобы было видно, что вы хотите.
Я привёл пример на "C c GOTO". Могу также на ассемблере привести, но это будет просто "развёрнутое" то же самое. Задача - как-нибудь красиво написать программу на "C без GOTO" так, чтобы полученный код не делал никаких "лишних действий", про сравнению с.
Это довольно мутная просьба, я знаю.
А вот что вы хотите - визуальную красоту кода на языке высокого уровня или его оптимальность, вы и скажите.
Красоту.
(Странная фантазия про гипотетический оператор)
Ну например! Как это
можно было бы сделать.
Многие знают про сокращённый тернарный оператор. Он
есть и в C. Я уже и с ним пытался сделать, но выходит всё равно криво.
Как работает этот оператор, вы можете прочитать по ссылке.
Итак. Ввожу новый оператор "⸮:"
Его действие:
y ⸮: x (буквы переставлены не случайно).
Проверяет на nonzero xЕсли не 0, то выполняет y, а возвращает xЕсли 0, возвращает 0Этот оператор является помесью
сокращенного тернарного оператор и
оператора запятойРеализовать такое же действие можно например так X?(Y,X):0
- #include <stdio.h>
- #define NewOp(X,Y) X?(Y,X):0
- main()
- {
- int n, stat;
- while(1)
- {
- scanf("%d", &n);
- stat=NewOp(n>0, printf("positive"));
- printf("\n%d\n", stat);
- }
- }
Можете убедиться, что оператор работает. Правда, пришлось обойтись без красивого значка ⸮
Вот, с помощью подобной конструкции, можно легко и изящно реализовывать всякие сложные ветвления.
В том числе наш случай:
- if( (X⸮:B) || (Y⸮:C) ) A;
NT2000Вот конструкция:
if( x?B():( y?C(): false))
{ A(); }
Такая конструкция подходит, только ещё нужно учесть, что B и C могут 0 вернуть. Нужно так if( X? (B, true): Y? (C, true): false) A;
Здесь запятая - это оператор запятая.
Но пока меня эти кунштюки не вдохновили. Видимо, идеально подходящей конструкции для данного случая, в языке C просто нет, раз уже столько участников высказалось.