Чего Вам не хватает в С ?

Тема в разделе "LANGS.C", создана пользователем osox, 14 июн 2010.

  1. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    We conclude that default fall through on switches is a design defect in C. The overwhelm-ing majority
    of the time you don't want to do it and have to write extra code to defeat it.
     
  2. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    тоесть 97 % времени мы должны писать дополнительный код
    в виде
    ...
    break;
    ...
    break;
    ...
    break;
    и только в 3 % требуется реально fall through
     
  3. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Ругать C за то, что он был задуман как ассемблер уровнем повыше ассемблера – нонсенс. Хотя неплохо бы case [WM_MOUSEFIRST, WM_MOUSELAST): :derisive:
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    osox
    согласен, лучше было бы nobreak;
     
  5. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    baldr
    в смысле, свитч по интервалу?
     
  6. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Да. Отсутствие break вполне оправдано в конструкциях вида
    Код (Text):
    1. switch (state) {
    2. case 0:
    3. case 1:
    4.   // операторы
    5.   break;
    6. ...
    7. }
    Хотя осмысленно расширить switch возможно и не удастся (больно он заточен только на отношение эквивалентности).
     
  7. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Отсутствие break оправдано Устройством Даффа.
     
  8. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    GoldFinch
    Оно ничем не оправдано. То, что некий уДафф придумал, как можно использовать врождённое уродство языка (и всё равно его потуги давно уже абсолютно бесполезны на современных процах) - это забавный казус и не более. Типа как шестой палец или третье яйцо.
     
  9. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    CyberManiac
    Какую Вы предлагаете альтернативу безбрейковому свичу для реализации следующей логики
    Код (Text):
    1. ...
    2. elif (selector == do_this)
    3. {
    4.    ...
    5. }
    6. elif (selector == do_this_and_that)
    7. {
    8.    ...
    9. }
    10. elif ...
    с сохранением эффективности по размеру и скорости?

    Приоритет С - гибкость и эффективный бинарный код, а это подразумевает максимум свободы и минимум противодураковых средств.

    Есть множество других языков, где транслятор выполняет ф-ции няньки.
     
  10. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    green
    Вы сколько таких извращеньицев за всю свою жизнь написали? Я как-то с трудом припоминаю, но точно не больше одной штуки в год. Один раз в год можно и не выёживаясь, ручками - goto никто не отменял. А вот брейки лепить из-за этой долбофичи приходится каждый день по несколько раз.
     
  11. AlexCab

    AlexCab New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2008
    Сообщения:
    142
    Off: Рас уж зашол разговор, какой из вариантов IF и SWITCH вы считаете наиболее удобным, и читабельным?
    Код (Text):
    1. \\Такой вид, для случая когда вариантов немного, "IF","THEN","ELSE" должны быть выровнены в одну колонку.
    2. IF A == 1,2,...
    3. THEN{\*Операторы если A == 1*\}
    4. THEN{\*Операторы если A == 2*\}
    5. ...
    6. ELSE{\*Операторы если A != ни одному из перечисленных*\}
    7.  
    8. \\Тоже без скобок, ключевые слова "IF","THEN","END","ELSE" должны быть выровнены в одну колонку.
    9. IF A == 1,2,...
    10. THEN: \*Операторы если A == 1*\
    11. END:
    12. THEN: \*Операторы если A == 2*\
    13. END:  
    14. ...
    15. ...
    16. ELSE: \*Операторы если A != ни одному из перечисленных*\
    17. END:
    18.  
    19. \\Блоки операторов через запятую.
    20. IF A == 1,2,... {\*Операторы если A == 1*\},{\*Операторы если A == 2*\},...,ELSE{\*Операторы если A != ни одному из перечисленых*\}
    21.  
    22. \\В одну строку без скобок, весь оператор должен быть в одной строке  
    23. IF A == 1,2,... THEN:\*Операторы если A == 1*\ THEN:\*Операторы если A == 2*\ THEN:... ELSE:\*Операторы если A != ни одному из перечисленых*\
    24.  
    25.  
    26.  
    27.  
    28. \\Объединение нескольких "IF" в один оператор, "IF","THEN","ELSE" должны быть выровнены в одну колонку.
    29. IF A == 1
    30. THEN{\*Операторы если A == 1*\}
    31. IF A == 2
    32. THEN{\*Операторы если A == 2*\}
    33. ELSE{\*Операторы если все условия ложны*\}
    34.  
    35. \\То же, "THEN" должен быть в той же строке что и "IF", а все "IF" и "ELSE" должны быть выровнены в одну колонку.
    36. IF A == 1 THEN{\*Операторы если A == 1*\}
    37. IF A == 2 THEN{\*Операторы если A == 2*\}
    38. ELSE{\*Операторы если все условия ложны*\}
    39.  
    40. \\То же без "THEN","IF" и "ELSE" должны быть выровнены в одну колонку.
    41. IF A == 1{\*Операторы если A == 1*\}
    42. IF A == 2{\*Операторы если A == 2*\}
    43. ELSE{\*Операторы если все условия ложны*\}
    44.  
    45. \\Вариант без скобок, ключевые слова "IF","THEN","END","ELSE" должны быть выровнены в одну колонку.
    46. IF A == 1
    47. THEN: \*Операторы если A == 1*\
    48. IF A == 2
    49. THEN: \*Операторы если A == 2*\
    50. ELSE: \*Операторы если все условия ложны*\
    51. END:
    52.  
    53. \\То же но "THEN" в той же строке что и "IF", "IF","END","ELSE" должны быть выровнены в одну колонку.
    54. IF A == 1 THEN: \*Операторы если A == 1*\
    55. IF A == 2 THEN: \*Операторы если A == 2*\
    56. ELSE: \*Операторы если все условия ложны*\
    57. END:
    58.  
    59. \\Тоже без "THEN", блок операторов начинается со следующей строки за "IF", "IF","END","ELSE" должны быть выровнены в одну колонку.
    60. IF A == 1
    61. \*Операторы если A == 1*\
    62. IF A == 2
    63. \*Операторы если A == 2*\
    64. ELSE: \*Операторы если все условия ложны*\
    65. END:
    66.  
    67.  
    68. \\С составным условием, "IF","END","ELSE" и всторая часть условий должны быть выровняны в одну колонку.
    69. IF A > 1 &  
    70. A < 5 THEN: \*Операторы если A в диапазоне 2-4*\
    71. A < 8 THEN: \*Операторы если A в диапазоне 2-7*\
    72. ELSE: \*Операторы если A не попадает ни в один из диапазонов*\
    73. END:
    74.  
    75. \\Тоже со скобками, "IF","END","ELSE" и всторая часть условий должны быть выровнены в одну колонку.
    76. IF A ==  
    77. 1 THEN{\*Операторы если A == 1*\}
    78. 2 THEN{\*Операторы если A == 2*\}
    79. ELSE:{\*Операторы если A != ни одному из перечисленных*\}
    80.  
    81.  
    82.  
    83. \\Вариант SWITCH
    84. SWITCH(\*Первая часть условия*\)
    85. CASE(\*Вторая часть условия*\){"Операторы"}
    86. CASE(\*Вторая часть условия*\){"Операторы"}
    87. ELSE{"Операторы"}
    88.  
    89. \\Тоже без скобок для условий, но "SWITCH","CASE","ELSE" должны быть выровнены в одну колонку.
    90. SWITCH \*Первая часть условия*\
    91. CASE \*Вторая часть условия*\{"Операторы"}
    92. CASE \*Вторая часть условия*\{"Операторы"}
    93. ELSE{"Операторы"}
    94.  
    95.  
    96. \\Тоже без скобок для операторов, но "SWITCH","CASE","ELSE","END" должны быть выровняны в одну колонку.
    97. SWITCH \*Первая часть условия*\
    98. CASE \*Вторая часть условия*\: "Опереаторы"
    99. CASE \*Вторая часть условия*\: "Опереаторы"
    100. ELSE: "Опереаторы"
    101. END:
     
  12. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Следует помнить, что существуют библиотеки.

    Часто пользователи библиотек используют какую-нибудь библиотеку и знай себе ее нахваливают. При этом некоторые быдлокодеры параллельно говорят что мол вот эта фича в языке не нужна, та фича в языке не нужна, т.к. они, эти быдлокодеры, эти фичи не используют. Только вот эти самые быдлокодеры понятия не имеют как реализованы библиотеки которые они используют, и до этих идиотов не доходит что без этих "не нужных" фич языка некоторые библиотеки просто не могли бы существовать в том виде в котором они существуют.

    Разумеется я не имею ввиду участников форума wasm.ru, которые по умолчанию считаются грамотными людьми.
    Просто хочу обратить ваше внимание на то, что вы может в своем коде не юзаете некоторые фичи языка, зато юзаете библиотеки в которых юзаются эти фичи языка.
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    break по-моему не то чему нужно придираться. Чего-то не хватает в одном языке, используйте другой язык.
     
  14. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    AlexCab, всё придумано до нас. Паскалевский case пялит сишный switch в орало и анало.

    PS В MASM'е никакого break нет и в помине. Был бы нужен - сделали бы. Но break не нужен. Ибо ELSEIF самодостаточен.
     
  15. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    CyberManiac
    По фичастости, но не по эффективности. Сишный свич отлично проектируется на архитектуру железа, в отличие от.
     
  16. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    часто использую такие моменты

    case CASE_N:
    // действия для N
    // а потом для M и O

    case CASE_M:
    case CASE_O:
    // действия только для M и O
    break;

    так что не так оно и лишнее. введение nobreak добавит лишнюю команду да еще и очень узкого применения.

    а кэйсы по диапазону есть и активно юзаются в гцц.

    case 4:
    case 14..28:
    case 33:
     
  17. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    Самое большое, что раздражает меня при работе (думаю, сам язык С++ тут не при чём) - время компиляции. На работе солюшн собирается 1.5 часа. Бывает, в одном проекте внесёшь изменения после которых приходится всё пересобирать. Или с сервера возьмёшь сорцы нескольких файлов - не собирается, а чтобы собралось приходится брать весь солюшн и, опять, пересобирать.

    Здесь как-то поднимался вопрос о внутренней организации компиляторов языка C++. Скорее всего виноват не только С++, но и идиотская структура виндосовских исполняемых файлов.
     
  18. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    maksim_
    incredibuild поможет
     
  19. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    это странно.
     
  20. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    RedLord, х.з. как она распределяет сборку в локальной сети, но на моей машине при сборке грузится только 1 ядро из четырёх. Вот Вам и много задачность, распределение вычислительных мощностей.