![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
setq |
|
|||
Unregistered |
я собственно к чему. э... у любого языка есть недостатки, недочёты и недосмотры ну те или иные. не боги ведь горшки обжигали в конце-то концов. Страуструп тоже человек. наверно. может быть. ну не исключён такой вариант. :-)
понятно, что половина "недостатков" пропадает с увеличением опыта, когда узнаёшь Си++ получше. понятно, что всегда есть способы от этих заморочек избавляться. всякие обходные пути там итд. вот давайте их сюда сваливать. вот. начнём с мелочей :-) 0) мне не нравится, что break'ом нельзя выкинуться из конструкции for (;;) switch () { ... } потому что это слово одинаково как для выхода из for (;;) так и из switch () {} приходится чесать правой лапой за левым ухом. 1) мне не нравится, что в определении функции нужно писать f (int x, int y) и нельзя просто f (int x,y) 2) мне не нравится, что можно написать for (;;) { вместо for (; true ;) { и нельзя while () { вместо while (true) { 3) мне не нравится, что если в for (;;) в круглых скобках до первой запятой объявляется переменная - for (int i;;) - то туда уже не засунуть других выражений, типа - for (i=6, j=0, k=666;;) пока всё :-)) |
|||
|
||||
RAN |
|
||||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
А можно только ругать? А оспаривать и хвалить?
Ну, всё равно молчать не умею ![]() Насчёт break Я об этом тоже думал. И мне хотелось бы, чтоб в дополнении к break существовал бы оператор, условно назовём его block <имя> {...}. Чтоб возможно было такое:
Наличие имени у блока позволяло бы выходить из вложенных блоков. Имена были бы локальны, т.е. действовали лишь в пределах блока. И никаких конфликтов. Просто бы решалась проблема выхода из вложенных циклов
Вот такая идея ![]() P.S. Я подсел на C конкретно. С - лучший язык ![]() |
||||
|
|||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
RAN - идея насчет блоков с точки зрения компиляции не очень удачна, так же как и простые переходы (не знаю, есть ли они в C, но в паскале это были goto <label>), т.к. это нарушает структуру программы...
-------------------- С уважением, г-н Посол. |
|||
|
||||
DENNN |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Есть goto:метка
Почему это интересно? По современным представлением уровень программы понижается с каждым оператором goto (причем не только C, но и любой другой). Существует теорема (или что-то подобное, названия не помню), что любую конструкцию, использующую операторы перехода можно переписать без них (что кстати правда) ![]() block.....break также удовлетворяет этим понятим, как и while....break, for....break и т.п. А мне не нравиться, что при объявлении функции значения параметров по умолчанию всегда должны стоять последними, а при вызове такой функции, если мне надо передать последний параметр, то я вынужден и прописывать все предыдущие перед ним. Это серьезное препятствие при позднем совершенствовании кода, кода скажем мне необходимо в функцию добавить еще один параметр не имеющий default-значения, то приходиться весь код вызовов этой функции переписывать (ну либо искать более удобные пути). |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
ОЧЕНЬ НЕ НРАВИТСЯ путаница с .h и .cpp - с точки зрения пространства имён (что откуда будет видно, если поочередно подключать "H к CPP", "CPP к CPP", "CPP к H" и "H к H"
![]() ![]() -------------------- ![]() |
|||
|
||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
CPP forever !
![]() ![]() ![]() setq, твоя третья проблема может быть разрешена так : for (int i=6, j=0, k=666;;) А вот мне бы хотелось вложенных функций - как в Паскале. А также того, чтобы при объявлении переменных класса можно было бы указывать инициализатор : class MyClass { int cnt = 0; }; Да, неплохо еще бы иметь возможность делать макросы с одним именем и различным числом параметров, как это можно для функций. Ну и вообще, добавить всяческой функциональности препроцессору. Вот, например, хорошо бы ввести переменную времени компиляции __FUNCTION_NAME__ , чтобы можно было выдавать диагностику типа printf("Ошибка ... в функции %s",__FUNCTION_NAME__); А еще поддерживать двоичный формат : long i = 0b10011100011000111000001100000110; И еще - чтоб можно было делать switch по переменной любого типа : switch (str) { case "King": ... case "Crimson": ... } switch (d_value) { case double(1) : ... case double(1.5) : ... } И чтоб как в Паскале можно было в switch'е указывать диапазон : switch (i) { case 1 .. 3: ... case 4: ... } И чтобы можно было переопределять операторы с двумя параметрами. Типичный пример - operator[][] для обращения к элементам матрицы. И чтобы typeof включили в стандарт. Фу, блин, расписался... Все же C++ - лучший язык программирования ! Это сообщение отредактировал(а) Crait - 27.9.2003, 14:50 |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
много того, что хотелось бы видеть в C++ (по крайней мере мне), есть в Delphi (точнее в Object Pascal):
1. properties 2. dcu - объявления и реализации находятся в одном файле 3. уже упоминавшееся (int x,y) 4. div и /, а не просто / - чтоб всегда было видно дробноеделение или нацело Это сообщение отредактировал(а) maxim1000 - 27.9.2003, 15:22 -------------------- qqq |
|||
|
||||
GanZaleZ |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 15.7.2003 Репутация: нет Всего: нет |
Эх человеки ! Как грили Пионеры - "Мы не ищем лугких путей"
Так что если бы да кобы то С++ превратился бы в PHP и не нужно бы было обьявлять какого типа переменная ! ))) но это было бы уже смешно ! А может вообще зачем чтото писать ? Вышел бы Visual C# какойнить 9 версии , и чтобы там вам Вообще ниче писать не надо было , мышкой поводил , поколдовал , и все ! Хе хе хе Есть конечно траблы ! где не без них ! Но мне всерафно кажется что это обсуждать - это как обсуждать РУССКИЙ язык ! Вот я фсеже не пойму почему слово КОФЕ мужского рода ! )))) |
|||
|
||||
Fantasist |
|
||||||||||||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Ничего подобного! Во-первых, с точки зрения структуры, break и continue реккомендуется использовать как можно реже. Во-вторых, в while, do и for эти операторы прерывают выполнения в границе одного блока и вполне понятно какого. А конструкция:
ничем не отличается от:
Так что и выдумывать ничего не надо.
Хе, ну ты сказанул. По другому даже теоретически нельзя, так что эта претензия не в какие ворота не лезет.
Используй перегрузку.
Так так оно уже и есть. Ничем от паскаля не отличается. Разница только в том, что в Паскале есть тип строка, а в С++ нету.
Действительно, что его обсуждать - все равно мы им не пользуемся. -------------------- Волны гасят ветер... |
||||||||||||||
|
|||||||||||||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
"теоретически нельзя": не стоит бросаться такими выражениями, их еще нужно доказывать... или опровергать ![]() представим себе, что при вызове фунукции вместе со значениями можно писать имя параметра (по-моему, я этовидел в VB или еще в каком-то бейсике) тогда вполне возможно указать любое подмножество параметров, а остальные оставить по умолчанию P.S. Хотя лично мне такое бы не понравилось... -------------------- qqq |
||||
|
|||||
setq |
|
|||
Unregistered |
Fantasist <<Действительно, что его обсуждать - все равно мы им не пользуемся>>
:-) |
|||
|
||||
p0s0l |
|
||||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
И к чему это сказано ? Си - ЯВУ, зачем понижать уровень с помощью goto ? Я же говорил, что такие конструкции как block ... break и goto нарушают структурность, иерархичечность, что присуще ЯВУ, а не низкоуровневым языкам... Конечно, можно пользоваться goto, что я и делал, когда начал прогать, но сейчас я уже непредставляю, куда можно сунуть goto...
А вот если выход был бы за пределы внешнего блока, то тут могли бы появиться некоторые неувязочки, т.к. вначале каждого блока может выделятся память или запоминаться в стеке регистры (соответственно в конце блока регистры восстанавливаются) - тогда для организации выхода из двойного блока пришлось бы генерить специальный код для восстановления регистров и памяти.
Может я что-то не понимаю, но почему нельзя сделать такие вызовы: func1(,,,,,2.434); Т.е. первые параметры по умолчанию ?...
К слову: в Паскале нельзя делать case по строковым переменным (и по float тоже), можно только по целочисленным или перечисляемым типам... -------------------- С уважением, г-н Посол. |
||||||||
|
|||||||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: нет Всего: 1 |
2 Fantasist
Ты не прав, что в switch'е можно использовать переменную любого типа. Попробуй скомпилировать хотя бы следующее : int f1 (double Value) { switch (Value) { case double(1): return 1; case double(1.5): return 2; } return 3; } |
|||
|
||||
Fantasist |
|
||||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Вот именно тем и нарушает, что это безусловный выход. Я знаю одного человека (знаю, конечно, сильно сказано) который ругает своих подчиненных за использование более одно return в функции. Ну, ругает, может, сильно сказанно, но очень не поощряет. Почему? Все из-за той же структуры. И смысл break'a и return'a не совсем совпадают. После break'а еще код может выполнятся в данной функции - после return'a нет. Про continue я вообще молчу. Видал я с ним такое! ![]()
Да, ошибся. Теоретически все возможно. Можно ключевое слово ввести, типа default_value. Только, конечно, не в С++. Такая штукенция совсем не в духе детерминированного С++. Да и не думаю, что это бы что-то принесло. Сделали бы первый параметр по умолчанию возникли бы другие проблемы. Неговоря уже о том, что читать такие программы было бы еще тяжелее.
Ну так я и говорю, ничем от паскаля не отличается. ![]() -------------------- Волны гасят ветер... |
||||||
|
|||||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Остальное все, по моему, не стоит и обсуждать. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |