На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 114 115 [116] 117 118 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    В C/C++ тело функции фактически является составным оператором. {}; в данном контексте - это два выражения - составной оператор и пустой оператор.
      Цитата DesweR @
      да, мешает очень :D
      ExpandedWrap disabled
        //вот так можно
        struct Struct1
        {
        };
         
        void Func1()
        {
        }
         
        //а так нет
        struct Struct2
        {
        }
         
        void Func2()
        {
        };

      Да, это единственная проблема в С++ с ;
      Идет от того, что в С объявление структуры может является частью более сложного объявления:
      ExpandedWrap disabled
        struct point{int x; int y;} my_point;

      Тут идет объявление типа struct point и переменной my_point этого типа.
      ExpandedWrap disabled
        typedef struct point{int x; int y;} point;

      Тут объявляем тип struct point(в С без ++ struct является частью типа) и его синоним - point;

      Вот и для классов в С++ сделано также, отсюда необходимость ; как знака завершения объявления.

      Добавлено
      Цитата DesweR @
      Мда, мешает очень :D
      ...
      ExpandedWrap disabled
        void Func2()
        {
        };

      Кстати, так можно
        Цитата D_KEY @
        Идет от того, что в С объявление структуры может является частью более сложного объявления:

        Просто интересно, а C# ничего подобного от С не "унаследовал"? :)
          А ему не очень-то и надо. Сомневаюсь, что требование "компилировать исходники C без их модификации" для него предъявлялось.

          P.S. Судя по содержимому стандарта C# - описание типов у него не заканчивается символом ';'
          Но там и другие отличия от C/C++ в синтаксисе есть.
          Сообщение отредактировано: trainer -
            Цитата amk @
            С этим "можно не ставить, нужно ставить, нельзя ставить" в Паскале (и в Delphi тоже) проблем на самом деле больше, чем преимуществ.

            плюсую. правда в С, С++ мне не понятно, почему после определения например класса нужно ставить ';', а после определения функции -- нет.

            P.S. а, уже прочитал =))
            Сообщение отредактировано: korvin -
              Цитата korvin @
              С этим "можно не ставить, нужно ставить, нельзя ставить" в Паскале (и в Delphi тоже) проблем на самом деле больше, чем преимуществ.

              Ну и какие проблемы? :D
                Цитата DesweR @
                Цитата korvin @
                С этим "можно не ставить, нужно ставить, нельзя ставить" в Паскале (и в Delphi тоже) проблем на самом деле больше, чем преимуществ.

                Ну и какие проблемы? :D

                проблемы с генерацией паскалекода. все эти "особые случаи" ни разу не способствуют простоте генератора.

                [offtop]
                о новом Racket 5.1:
                "We’ve reimplemented the GUI layer, which meant throwing out about 200,000 lines of C++ code that built on Xt, Win32, and Carbon. We’ve replaced that C++ code with about 30,000 lines of Racket code that builds on Gtk, Win32, Cocoa, Cairo, and Pango."
                это win ящитаю =)
                [/offtop]
                  Цитата korvin @
                  проблемы с генерацией паскалекода. все эти "особые случаи" ни разу не способствуют простоте генератора.

                  И какие такие "особые случаи"? Последовательности инструкций разделяются точкой с запятой, всё.

                  Добавлено
                  мда...
                  такое ещё не обсуждали, в предвкушении эпического срача на 100500 страниц :lool:
                    Цитата korvin @
                    "We’ve reimplemented the GUI layer, which meant throwing out about 200,000 lines of C++ code that built on Xt, Win32, and Carbon. We’ve replaced that C++ code with about 30,000 lines of Racket code that builds on Gtk, Win32, Cocoa, Cairo, and Pango."
                    это win ящитаю =)

                    Тема не раскрыта :)
                      Цитата DesweR @
                      Цитата korvin @
                      проблемы с генерацией паскалекода. все эти "особые случаи" ни разу не способствуют простоте генератора.

                      И какие такие "особые случаи"? Последовательности инструкций разделяются точкой с запятой, всё.

                      Добавлено
                      мда...
                      такое ещё не обсуждали, в предвкушении эпического срача на 100500 страниц :lool:

                      потому что формат "~s;" для инструкций уже не прокатывает, нельзя написать
                      ExpandedWrap disabled
                        (defparameter *separator* ";")
                         
                        (defmethod print-object :after ((i instruction) &optional stream)
                          (format stream *separator*))

                      а потом для каждого типа инструкций написать методы
                      ExpandedWrap disabled
                        (defmethod print-object ((i if-instruction) &optional stream)
                          (format stream "if ~s then ~s" (if-cond i) (if-then i))
                          (when (if-else i)
                            (format stream " else ~s" (if-else i))))
                         
                        (defmethod print-object ((i begin-instruction) &optional stream)
                          (format stream "begin ~{~s~} end" (begin-instructions i)))

                      не замарачиваясь над ';' в каждой инструкции, допускающей последовательность вложенных инструкций (типа begin, type, var, const, unit, program)

                      Добавлено
                      с операторами ("арифметическими", логическими) все еще хуже, можно написать
                      ExpandedWrap disabled
                        begin
                          ...;
                          1 + 2;
                          ...;
                        end;

                      и это будет хоть и бессмысленная, но вполне законная синтаксическая конструкция. ну да это во многих языках так. и это не говоря уж о точке в конце последнего end =)

                      Добавлено
                      или другой пример:
                      ExpandedWrap disabled
                        var
                          ...;
                          ...;
                        begin
                          ...;
                        end;

                      как "инструкция var определяет, где у нее конец"? у begin есть end, а у var -- нет. т.е. уже нельзя так просто представить, например program как
                      ExpandedWrap disabled
                        program ::= {top-level-instruction ';'*}
                        top-level-instruction ::= var | type | const | uses | procedure | function

                      у program, unit, begin есть end, у остальных -- нет.
                        Цитата korvin @
                        и это будет хоть и бессмысленная, но вполне законная синтаксическая конструкция.

                        http://docwiki.embarcadero.com/RADStudio/en/E2014_Statement_expected,_but_expression_of_type_'%25s'_found_(Delphi)

                        Цитата korvin @
                        как "инструкция var определяет, где у нее конец"?

                        Там, где начинается следующий раздел.
                        ExpandedWrap disabled
                          const
                            ...
                          type
                            ...
                          var
                            ...
                          begin
                           
                          end;


                        korvin
                        А вообще, там ещё курить и курить:
                        http://docwiki.embarcadero.com/RADStudio/en/Delphi_Compiler_Errors_Index
                          DesweR, понятно, что компилятор и программисты справляются, вопрос только зачем эти мучения?
                            Цитата D_KEY @
                            DesweR, понятно, что компилятор и программисты справляются, вопрос только зачем эти мучения?

                            Какие мучения?
                            Если что, это вопрос к korvin'у :D
                              Цитата DesweR @
                              Цитата D_KEY @
                              DesweR, понятно, что компилятор и программисты справляются, вопрос только зачем эти мучения?

                              Какие мучения?

                              С нелогичным синтаксисом. По мне так лучше вообще без ;
                              Но если уж есть, пусть будет в конце инструкции, чтобы не возникало лишних вопросов.
                                Цитата DesweR @

                                Мда, мешает очень :D

                                Зато так можно
                                ExpandedWrap disabled
                                  void f() {
                                  };
                                  struct s() {
                                  };

                                :)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 114 115 [116] 117 118 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.2293 ]   [ 14 queries used ]   [ Generated: 30.07.26, 17:05 GMT ]