На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
  
> Интересная статья
    Кто ещё захочет создать тему 'Pascal против C++' прочитайте вот это и задумайтесь. Зерно истины там есть. А так - слушайте свое сердце, а ещё больше - РАЗУМ!!!
    Удачи.


    ЗЫ Тема открыта для комментариев!!! :rolleyes:
    http://a-vaulin.chat.ru/cpas_maligin.html
      Статья не очень интересная.

      Цитата
      Сравнение двух языков программирования ни к чему не приведет. .. Не критикой своего коллеги заниматься нужно, мол, не на том языке он программу написал, следовательно, уровень его не соответствует принятым международным понятиям и нормам.

      самая здравая мысль :)

      1) крикливая, это самый главный минус
      2) автор постоянно путает C и С++. Это совершенно РАЗНЫЕ языки. Большинство его нападок на С недействительны в С++.
      3) видимо, он не очень хороший программист. Потому что усраивался в непонятно какую контору. "Борланд не компания" :). C++ он и в Африке С++. Что от МС, что от Борланд, что от GNU. Все НОРМАЛЬНЫЕ работодатели это знают, а с ненормальными связывается сами знаете кто :whistle:
      4)
      Цитата
      Представим себе две столярных мастерских.

      дальше остапа пронесло так, что я ниасилил
      5)
      Цитата
      Далее, в языке С отсутствует интервальный тип данных.

      чуть ли не единственный пункт, являющийся действительно фундаментальной недоработкой, но к счастию, умельцы легко обходят эту чтуку.
      6)
      Цитата
      Можно совершенно безбоязненно применять тип данных real.

      бред. Он даже не сравнил разрядность этих 2-х типов. Паскалёвский real - 6-и байтный, поэтому заведомо точнее C-шного 4-х байтного float :)
      Явный незачёт :P
      7)
      Цитата
      Конструкция оператора-переключателя switch в языке Си по сравнению с оператором варианта case в Паскале оформлена хуже, т.к. требуется в каждой строке писать case.... break;

      а можно не писать. Аффтар видимо не в курсе :)
      8)
      Цитата

      Работа с указателями в Паскале лучше организована, проще, логичнее, понятнее, строже.
      //Пример на Си:
      int *k;
      можно написать
      *k=10;
      или
      k=10;

      аффтар явно не в курсе, что такое ссылочный тип в С++ :)
        Интересно автор сводит мощь и гибкость C к его недостаткам. Статья необъективна. Автору засчитываем слив. :lol:
          ну, вообще то про с-шные строки человек всё заметил справедливо.
          К счастию, в C++ у нас есть std::string ;)
            Я не вдавался в подробности, я просто отметил мысль, что компании навязывают часто свои продукты... Вот в этом здравое есть зерно. Ну а ещё в том, что каждый должен выбрать себе свое и совершенствоваться в этом.

            Добавлено
            А про тип float он прав? Просто негде проверить....
              Цитата
              Сколько же нужно искать по тексту С-программы то место, где объявлена требуемая переменная, какая из них локальная или глобальная. Что в этом хорошего?

              Нисколько. Переменная объявлена там, где используется. А как часто нужно прыгать к началу функции для того, чтобы добавить нужную переменную?
              Цитата
              Далее, в языке С отсутствует интервальный тип данных.
              Действительно это так.
              Цитата
              Получается интересная картина. Применяя тип данных float в языке Си мы должны сначала написать программу, отладить ее, решить тестовые примеры, и только тогда принять решение о целесообразности типа данных float, в противном случае в программу потребуется внести изменения, данные типа float заменить на double. Во-первых, это мягко говоря чушь, а во-вторых, double требует в два раза больше памяти.

              А на самом деле - лишь возможность выбора. Нужна точная арифметика - получите. Нужна "неточная" - получите. Но и там и там есть погрешность.
              Цитата
              Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля.
              Каждый программист, начинающий программировать на С - вполне возможно. Но не опытный сишник.
              Цитата
              Работа с указателями в Паскале лучше организована, проще, логичнее, понятнее, строже.
              //Пример на Си:
              int *k;
              можно написать
              *k=10;
              или
              k=10;
              компилятор не показывает ошибку.

              А тут и нет никакой ошибки. Он резонно считает, что программист инициализирует указатель адресом соответствующей ячейки памяти. Что в этом плохого?
              Цитата
              Работа с файлами в Паскале организована проще, понятнее, все разложено по "полочкам", а программисту остается для написания фрагментов программы затратить минимум времени.
              Автор явно не знает - что такое потоки (iostreams).
                Цитата
                А как часто нужно прыгать к началу функции для того, чтобы добавить нужную переменную?

                ну, это не очень страшно, если вовремя отстреливать авторов, пишуших функции длиннее экрана :)

                Добавлено
                Цитата
                А про тип float он прав? Просто негде проверить....

                Да, с-шный float такой неточный. Но учти, что именно он является "родным" например, для видекарточек.

                Паскалёвский банально длиннее. Он 6-и байтный. В Дельфи он называется real48.
                Почти нигде не используется :whistle:
                  Автор статьи просто клоун. Ему можно лишь порекомендовать последовать примеру Томми.

                  Цитата Flex Ferrum @
                  Далее, в языке С отсутствует интервальный тип данных.
                  Действительно это так.

                  Простите мне мою серость, но зачем он нужен? Типобезопасности С он не добавит, а С++ прекрасно обходятся и без него.
                    Цитата Relan @
                    Простите мне мою серость, но зачем он нужен? Типобезопасности С он не добавит, а С++ прекрасно обходятся и без него.

                    Иногда (не всегда, но бывает) действительно необходим тип данных типа множества из паскаля. Т. е. множество, существующее еще на этапе компиляции.
                      Цитата
                      Сделана попытка рассмотреть только некоторые базовые элементы языков Паскаль и Си. Как нельзя однозначно утверждать что лучше, лето или зима, так нельзя утверждать какой язык лучше, Паскаль или Си. Нравится Паскаль, нравится Си и слава богу. Программируйте на том языке, какой Вы выбрали.
                      Вопрос: зачем тогда всю эту бодягу разводить надо было? :huh:
                        Я бы на месте автора ещё ушат грязи на С-шные макросы вылил :)
                          Цитата BugHunter @
                          Я бы на месте автора ещё ушат грязи на С-шные макросы вылил :)
                          Судя по уровню знания автором (точнее аффтаром) языка С, он о существовании макросов просто не догадывается. :) Кстати, не понимаю, почему так принято ругать макросы? При грамотном использовании они превращаются в очень мощный инструмент, так же как и другие средства языка. ЕМНИП, Ритчи сказал: "Си -- это острая бритва. С его помощью можно сделать красивую программу, а можно кровавое месиво." ИМХО этим всё сказано.
                          Сообщение отредактировано: Relan -
                            Цитата
                            Элементы массивов в языке Си нумеруются, начиная с 0. Это - мелочь, но удобным это назвать никак нельзя. Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля
                            интересно, если это так неудобно то почему почти во всех новых языках промышленного уровня используется именно такая нотация ?
                              Да ладно вам чувака критиковать.. Ну не взяли его на работу, потому что знал паскаль, а нужен был си. Вот чувак и разчуйствовался.
                                Цитата Antoxa1985 @

                                Цитата
                                Элементы массивов в языке Си нумеруются, начиная с 0. Это - мелочь, но удобным это назвать никак нельзя. Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля
                                интересно, если это так неудобно то почему почти во всех новых языках промышленного уровня используется именно такая нотация ?

                                Наверное, это по инерции или по привычке. А может, для обеспечения простоты перехода от одного языка к другому. В некоторых случаях удобнее иметь массивы, начинающиеся не от 0. AFAIK, так не во всех языках.
                                  Цитата mo3r, 28.02.2006, 07:51:11, 1028872
                                  Элементы массивов в языке Си нумеруются, начиная с 0. Это - мелочь, но удобным это назвать никак нельзя. Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля


                                  имхо, достаточно просто один раз запомнить, как в _определённом_ языке задаются массивы... а мне вообще нравится VB, там массив можно задать так: Dim arrData(5 To 9) :)


                                  Скрытый текст
                                  зы. паскаль - не язык, а средство насилия над мозгом программера.
                                    Цитата BlackSnake @
                                    имхо, достаточно просто один раз запомнить, как в _определённом_ языке задаются массивы... а мне вообще нравится VB, там массив можно задать так: Dim arrData(5 To 9)
                                    Цитата BlackSnake @
                                    Скрытый текст:
                                    кой-кому надо устроить терапию алгоритмами с fixed-point ;)
                                      Цитата BlackSnake @
                                      зы. паскаль - не язык, а средство насилия над мозгом программера.

                                      >:(
                                        Цитата BlackSnake @
                                        зы. паскаль - не язык, а средство насилия над мозгом программера.

                                        Зря. Достаточно красивый, понятный и мощный язык (не в пример тому же VB (VBA), например).
                                          Судя по всему автор не различает C и C++, т. к. в C < C99 нельзя объявлять переменные в произвольном месте -- только в начале блока (или как там называется конструкция внутри {}).
                                          Цитата Flex Ferrum @
                                          Иногда (не всегда, но бывает) действительно необходим тип данных типа множества из паскаля. Т. е. множество, существующее еще на этапе компиляции.

                                          Тогда давайте сразу вспомним, что это множество не может состоять более чем из 256 элементов, что сильно сказвается на его полезности отнють не в лучшую сторону.
                                            Цитата linuxfan @
                                            Тогда давайте сразу вспомним, что это множество не может состоять более чем из 256 элементов, что сильно сказвается на его полезности отнють не в лучшую сторону.

                                            Ты видимо не понимаешь, в чем полезность множеств.
                                              Цитата
                                              Ты видимо не понимаешь, в чем полезность множеств.

                                              Но не до 256 элементов.

                                              Посмотрели бы вы на питонячую реализацию... :)
                                                Ни в коем разе не желаю никого обидеть, но повторю то, что говорил уже не один раз. Если кому влом читать - переходите сразу к последней строчке.

                                                даже Бейсик - язык... и Форт - язык... и пхп с перлом - языки... (несмотря на то, что субъективно мне перл не нравится) да блин, даже Ява-скрипт - язык программирования! (кого не назвал, не обижайтесь)
                                                а Си - мега-язык :) хотя Асм ещё более мега-язык :)

                                                а вот Паскаль - это не язык программирования, а франкенштейновское чудовище, созданное с единственной целью - зас*рать студентам мозги принципами структурирования (кто не верит - почитайте что-нить о истории языков)... Изначально в паскале только и были, что структурные элементы (типа циклов и условных и безусловных переходов. case не было.), оператор ввода с клавы и оператор вывода, да несколько мат. операций. (а, ещё было обязательное объявление всего, даже и так понятного) Только намного позже, когда подросло первое поколение затр@х@нных Паскалем студентов, они (бывшие студенты) начали наворовывать в паскаль прочие полезняки из других языков, но поскольку они были жестоко замучены Паскалем, выбросить его геморройные и излишние элементы у них не хватило духу...

                                                вообще же - паскаль это ни то, ни сё... слишком сложен для простых задач и слишком слаб для сложных.

                                                если мне понадобится например, хитрый калькулятор, я его буду писАть на VB, ибо так проще. Если мне понадобится драйвер - буду материться над каждой строкой (ибо если честно - в Си я не особенно силён), но драйвер я буду писАть на Си. Если мне понадобится серверное приложение - буду писать на ПХП.

                                                А у паскальщиков один ответ на всё: "Делфя рулит, ибо она универсальна, а я других языков фсё равно не знаю, ибо паскаль крут".
                                                Соответственно, паскальщик напишет простой калькулятор за то время, за которое я напишу такой же на VB дважы, а драйвер напишет чуть быстрее, чем хороший программер на Си, зато его паскальный драйвер будет втрое больше весить и вдвое медленнее работать. (а уж про делфийские CGI-приложения мне и говорить-то противно...)



                                                Вывод. Паскаль не умер, ибо не рождался, но паскаль мёртв от рождения. А теперь ответть не вопрос: как называют человека, имеющего сношение с покойником? :) [блин, почему в стандартных смайлах нет смайла "меня тошнит"?]
                                                  Цитата BlackSnake @
                                                  франкенштейновское чудовище, созданное с единственной целью - зас*рать студентам мозги принципами структурирования
                                                  к твоему сведению, далеко не все здесь любители авангарда.
                                                  Цитата BlackSnake @
                                                  кто не верит - почитайте что-нить о истории языков
                                                  была одна веселая статейка, типа интервью с Керниганом (или Ричи), где говорилось, что С придумали ради стеба...
                                                  Цитата BlackSnake @
                                                  Вывод. Паскаль не умер, ибо не рождался, но паскаль мёртв от рождения.
                                                  На Паскале пишут, и довольно успешно. А ты говоришь про трупы.
                                                    Цитата Rikkie @
                                                    была одна веселая статейка, типа интервью с Керниганом (или Ричи), где говорилось, что С придумали ради стеба...
                                                    На дату статьи ты внимания не обратил? ;)
                                                      Цитата Rikkie @
                                                      была одна веселая статейка, типа интервью с Керниганом (или Ричи), где говорилось, что С придумали ради стеба...

                                                      Статейка эта была сама по себе стебная. :)
                                                        Цитата Relan @
                                                        На дату статьи ты внимания не обратил?
                                                        обратил, обратил :yes:
                                                        Цитата Flex Ferrum @
                                                        Статейка эта была сама по себе стебная.
                                                        на то и намекалось

                                                        Добавлено
                                                        Это к слову о
                                                        Цитата BlackSnake @
                                                        зас*рать студентам
                                                          Наш ответ Чемберлену:
                                                          Цитата
                                                          От: AlexEagle http://vm.yess.ru/
                                                          Дата: 18.02.05 00:56
                                                          Оценка: 5 (3) +4 )
                                                          Здравствуйте, d Bratik, Вы писали:

                                                          DB>...настоящие программисты избегают C++

                                                          И предпочитают делфи где-то по следующим причинам:

                                                          1. За то что наследование используемых модулей не поддерживается.
                                                          Т.е. Если модуль А использует Модуль Б, и оба они используют модуль С,
                                                          то недостаточно прописать использование модуля с в Б, нужно это
                                                          использование обязательно и в А прописать.
                                                          2. За отсутствие шаблонов.
                                                          3. За отсутствие возможности создания автоматических объектов (все объекты изначально является указателем).
                                                          Соответственно приходистя вручную вызывать конструктор/деструктор (для чего и TRY..Finnaly)
                                                          4. За отсутствие множественного наследования
                                                          5. За отсутствие возможности перегрузки операций
                                                          6. За WITH благодаря которому код становится не читабельным до ужаса...
                                                          7. За дикую абстрактность от GUI модели, благодаря чему некоторые события не доступны,
                                                          некоторые не работают, а про главное окно приложения которое делит функционал с окном
                                                          Application я просто молчу. Хорошим примером поведения этой абстракности является функция MsgBox.
                                                          Можно ради интереса проследить что она делает (сколько вложенных вызовов). А еще класно
                                                          реализован Handle у компонентов — просто бестселлер, понял когда случайно вызвал в
                                                          деструкторе.
                                                          8. За жесткие ограничения на место описания переменных функции — между названием функции и началом блока
                                                          9. За невозможность смешивания переменных и функций класса при описании (вначале переменные а затем функции и не иначе)
                                                          10. За отсутвие удобных операторов типа +=, *=, -= и т.д. Про ++i и i++ я просто молчу.
                                                          11. За явное приведение типов. Особенно сильно "ЛЮБЯТ" за вызов функции Trunc для приведения вещественного в целому.
                                                          12. За отсутствие менеджера конфигураций. Так чтобы сделать Debug и Release хотябы, и пользоваться просто переключая их.
                                                          13. За дикий размер EXE, если конечно же не юзать пакаджи.
                                                          14. За то что ошибочная работа встроенных функций ведет к генерированию исключения, а не возврату кода ошибки. При этом во многих случаях приходится писать просто try ... except end; чтобы пропустить эту фичу.
                                                          15. За то что она не MDI. Это ужасно "УДОБНО". Приходится очищать рабочий стол перед открытием делфи, да и две запущенные — это головняк ("КРУТО"), поскольку никогда не знаешь в редакторе какой находишся. Иногда по ALT-TAB переключается только редактор, а главное окно нет.
                                                          16. За WITH благодаря которому дебаггер не показывае значение переменных типа with TComeCObject.Create(...) do Visible := TRUE;
                                                          Значение Visible — не увидишь никогда. Только если with SomeObject do SomeProperty := SomeValue; то в ТОЛЬКО окне свойств надо подставить SomeObject.SomeProperty и только тогда будет значение
                                                          17. За дебаггер который видит стек вызовов исключительно ограниченный модулями, пути которых включены в проект.
                                                          Так если в проект не подключить путь для просмотра (Project\Options\Search Path) C:\Program Files\Borland\Delphi6\Source\Vcl;C:\Program Files\Borland\Delphi6\Source\Rtl;C:\Program Files\Borland\Delphi6\Source\Rtl\Common;C:\Program Files\Borland\Delphi6\Source\Rtl\Sys;C:\Program Files\Borland\Delphi6\Source\Rtl\Win
                                                          то при возникновении события OnEnter у компонента на форме можно увидеть стек вызовов только с этой функцией.
                                                          НО!!!!!!!!!!!!! Если подключить пути то будет КУЧА!!!!!!! варнингов для делфевых модулей при компиляции, за которыми и "своих" не видно.
                                                          18. За отсутствие оператора "?". Есть только два псевдоаналога — варианты функции ifthen. При этом нормально работать можно со строкой и Integer-подобными значениями.
                                                          Когда речь идет об объекта то тогда запись выростает до TType(ifthen(...,Integer(Object1),(object2)) — грустно...
                                                          19. За компилятор, который хавает на ура запятую без указания последнего необязательного параметра функции.
                                                          Т.е. если function f(p1: Integer; b1: Boolean=false; B2: Boolean = false), то такое прокатит на ура — f(1,false,);
                                                          20. За директивы компилятора сделанные в стиле коментариев и мещающие коментированию текста их содержащего
                                                          21. За отсутствие нормального хелпа к системным функциям. Для того чтобы определить где находится описание сетевой
                                                          функции нужно выполнять поиск по каталогу сырцов. К примеру NetWkstaGetInfo которая вообще отсутствиет в
                                                          стандартных сырцах Ламерская система....
                                                          22. За то что значения дефолтовых параметров надо описывать и в описании функции/метода и в их реализации
                                                          23. За то что нельзя создать два пакета содержащие модули с одинаковыми названиями — среда не позволит, будет каждый раз ругаться что Пакет ХХХ использует модуль УУУ, который уже содержится в ХХ1 — это очень удобно, в с++ такого не добиться
                                                          24. За то что иногда невозможно открыть справку по F1, если модуль содержит ошибки.

                                                          Ну и как бы P.S.:
                                                          Все эти любимости собраны в 6-й версии делфи, поэтому если у кого одна из этих ужасно любимых фич не пойдет на другой версии — не расстраивайтей, всегдя найдется что полюбить в замен, на то это и делфи!
                                                            Цитата BlackSnake @
                                                            вообще же - паскаль это ни то, ни сё... слишком сложен для простых задач и слишком слаб для сложных.

                                                            Давай аргументированнно, а?
                                                            Цитата BlackSnake @

                                                            если мне понадобится например, хитрый калькулятор, я его буду писАть на VB, ибо так проще.

                                                            А как калькулятор с парсером выражений, осилишь, даже если на VB? И насколько быстрее чем я на Дельфи?
                                                              Цитата Smike @
                                                              А как калькулятор с парсером выражений, осилишь, даже если на VB? И насколько быстрее чем я на Дельфи?
                                                              Калькулятор с парсером выражений (типа bc) на Перле:
                                                              ExpandedWrap disabled
                                                                while ($_ = <>) {
                                                                    chomp;
                                                                    print eval($_), "\n";
                                                                }
                                                              Теперь вы оба напишите такой же на Бейсике и на Дельфи. Время пошло. :D
                                                              Сообщение отредактировано: Relan -
                                                                Цитата Relan @
                                                                Теперь вы оба напишите такой же на Бейсике и на Дельфи. Время пошло. :D

                                                                Ага, а пользовательские функции, кастомные форматы чисел и константы, а также плагины к нему есть?
                                                                  Цитата Smike @
                                                                  Ага, а пользовательские функции, кастомные форматы чисел и константы, а также плагины к нему есть?

                                                                  А ты уже написал калькулятор, который понимает +, -, /, *, и еще докучи стандартных перловых примочек? :) Тогда ты упустил начальные этапы проектирования ;)
                                                                    Это к перлу? Если да, то

                                                                    Цитата
                                                                    Ага, а пользовательские функции,

                                                                    Само собой.

                                                                    Цитата
                                                                    кастомные форматы чисел

                                                                    Объектами реализуемо.

                                                                    Цитата
                                                                    и константы,

                                                                    Обижаешь!

                                                                    Цитата
                                                                    а также плагины к нему есть?

                                                                    Что такое "плагины", не знаю, а модули есть и много, см. CPAN.
                                                                      Кстати, Python рулит.
                                                                      Вот калькулятор на нём: http://gazette.linux.ru.net/lg78/articles/rus-krishnakumar.html
                                                                        У-у-у. Народ уже совсем юмора не понимает...
                                                                          Relan понимает. Это я для пасквилисто-депхинистов заначил:)
                                                                            Lucifer, то, что макросам в С++ не место, с этим я согласен. Но вот в С они вписываются очень и очень органично.
                                                                              Цитата
                                                                              Lucifer, то, что макросам в С++ не место, с этим я согласен. Но вот в С они вписываются очень и очень органично.


                                                                              Макросы - это разговоры в пользу бедных. В сях ничего более цивилизованного нету, вот и приходится. Это видимо такая привычка линуксоидов: "если мы должны с этим работать, то мы должны это полюбить" :)
                                                                              Единственное место, где без макросов было совсем тяжко - это декларация карт сообщений в MFC :).
                                                                              Если ты ещё не веришь в ужос макросов, попробуй, например, с помощью макроса A2W преобразовать в юникод мегабайт 5 текста :). Он упадёт именно потому, что он - макрос :). См. так же тему DrUnkarda в Многошуме о том, как чуваки из MS зажигают :).

                                                                              ..В общем, макросам - не место в жизни современного человека.
                                                                                Цитата BugHunter @
                                                                                ..В общем, макросам - не место в жизни современного человека.
                                                                                Хантер, не соглашусь.
                                                                                Контр-пример:
                                                                                ExpandedWrap disabled
                                                                                  #ifdef _DEBUG
                                                                                  #define DEBUG_PRINT(x) printf(x)
                                                                                  #else
                                                                                  #define DEBUG_PRINT(x)
                                                                                  #endif

                                                                                Еще контр-пример:
                                                                                Писал я когда-то модуль сбора статистики по алгоритмам на fixed-point. Модуль представлял собой класс, в котором определялись базовые арифметические операции, там же подсчитывалось на какой строке возникали насыщения etc. Без макросов этот вопрос не решается никак. Если будешь запрашивать строку в коде из перегруженного оператора, то он тебе выдаст номер строки в реализации перегруженного оператора. Поэтому приходилось использовать макросы.
                                                                                Т.ч. не следует считать макросы атавизмом. Просто злоупотреблять не надо. Всему свое место.
                                                                                Сообщение отредактировано: Rikkie -
                                                                                  Цитата
                                                                                  Хантер, не соглашусь.
                                                                                  Контр-пример:

                                                                                  ну, это не совсем макросы :). точнее - безобидные :)
                                                                                  я канешно, имел в виду функции-макросы, а не макроопределения :)

                                                                                  ..и тоже ведь можно нарваться :). Поэтому и выносить их желательно только в настройки проекта. Поэтому то что ты с условной компиляцией привёл - это не совсем макросы :).

                                                                                  Цитата
                                                                                  Если будешь запрашивать строку в коде из перегруженного оператора, то он тебе выдаст номер строки в реализации перегруженного оператора.

                                                                                  у, тут ещё вспомнил про макроопределения __FILE__ и __LINE__, тоже полезно бывает.
                                                                                  ..опять таки, уже всё что нужно - уже имеется в готовом виде.

                                                                                  Но заметь, что для C, что для C++ все приведённые примеры совершенно одинаково полезны ;)

                                                                                  А я же имел в виду возражение против фразы " в C они очень к месту ".
                                                                                    Цитата BugHunter @
                                                                                    Поэтому то что ты с условной компиляцией привёл - это не совсем макросы
                                                                                    А что же это?
                                                                                    Цитата Rikkie @
                                                                                    #define DEBUG_PRINT(x) printf(x)
                                                                                    Я же могу еще функциональности добавить, которая только в debug-режиме потребуется.
                                                                                    Цитата BugHunter @
                                                                                    у, тут ещё вспомнил про макроопределения __FILE__ и __LINE__, тоже полезно бывает.
                                                                                    :yes: ты меня понял. :yes:
                                                                                    Цитата BugHunter @
                                                                                    А я же имел в виду возражение против фразы " в C они очень к месту ".
                                                                                    Я видел более категоричное утверждение ;)
                                                                                      Цитата BugHunter @
                                                                                      См. так же тему DrUnkarda в Многошуме о том, как чуваки из MS зажигают
                                                                                      Хм... Как это в многошуме? Она же в моем разделе была? :blink:
                                                                                        И в моём тоже. В твоём она была более информативна ;)

                                                                                        Добавлено
                                                                                        Цитата
                                                                                        А что же это?

                                                                                        Да как тебе сказать.. если используется условная компиляция, то обычно не принято писать #define прямо в .cpp и .h файлах (ибо чревато), а выносить в настройки проекта (есть там такая чтука - preprocessor definitions), поэтому как то рука не поворачивается назвать это макросом - в настройках проекта они имеют спец свойство - видны во всех файлах проджекта, поэтому более безопасны, что ли :rolleyes:
                                                                                          Цитата BugHunter @
                                                                                          есть там такая чтука - preprocessor definitions
                                                                                          кхммм... я понимаю в этом месте _DEBUG, там ему и место, но размещать DEBUG_PRINT в preprocessor definitions <_< .... мало ли что DEBUG_PRINT делает, может у него вывод какой-то хитро-сложный, может там еще какие-то данные ворочаются. Да может этот дебаг-принт в других ед.тр нафинг не нужен.... к тому же этот дебаг-принт - наиболее простой пример, можно еще сложнее найти.
                                                                                            Честно говоря, этот DEBUG_PRINT(x) можно легко заменить на inline функцию. Так что здесь он как бы э.. не к месту.
                                                                                            Всё равно этот x будет вычисляться даже в release версии (никуда не деться, вот так вот фигово). Так шо - инлайн функция с пустым лелом в release спасут отца. Да и как то некошерно, лучше что нибудть такое:

                                                                                            ExpandedWrap disabled
                                                                                              #ifdef _DEBUG
                                                                                              inline void DebugPrint( const wchar_t* format, ... )
                                                                                              {
                                                                                                  va_list args;
                                                                                                  va_start(args, format);
                                                                                                      //и т.д. - разобрать лист параметров
                                                                                                  va_end(args);
                                                                                              }
                                                                                              #else
                                                                                              inline void DebugPrint( const wchar_t* format, ... ) {}
                                                                                              #endif


                                                                                            ....по крайней мере я не вижу, почему твой вариант с макросом в данном случае будет работать лучше (или быстрее, или удобнее)
                                                                                              В большинстве случаев, действительно, достаточно инлайн-функции. Но есть еще случаи с тем же __LINE__ или когда в дебаге нужно достучаться то членов класса. В последнем случае можно инлайн-функцию сделать другом класса, но лишние захламления тоже нездорово.
                                                                                                Цитата BugHunter @
                                                                                                Всё равно этот x будет вычисляться даже в release версии

                                                                                                Как раз в макросе ничего вычисляться не будет. А вот аргументы inline-функции вычисляются. По крайней мере если имеют побочные эффекты. С другой стороны при использовании макроса отладочная и релизная версии могут по-разному работать
                                                                                                  Цитата
                                                                                                  Как раз в макросе ничего вычисляться не будет.

                                                                                                  ?
                                                                                                  что за компилятор?.. Для MSVC++ 6 - аргумент вычислялся.
                                                                                                  ..сейчас в 7-е гляну.
                                                                                                    Цитата BugHunter @
                                                                                                    что за компилятор?.. Для MSVC++ 6 - аргумент вычислялся.
                                                                                                    ..сейчас в 7-е гляну.

                                                                                                    В любом нормальном компиляторе результат вычисляться не будет. На то он и препроцессор.
                                                                                                      Забавно то, что объектно-ориентированный Delphi(ObjectPascal) все время норовят сравнивать не с объектно-ориентированным C++, а с представителем предыдущего поколения C. Паскаль надо сравнивать с C, ObjectPascal - с C++.
                                                                                                      Цитата
                                                                                                      "Pascal фирмы Borland стал объектно-ориентированным в версии 5.5 и долго рассматривался как лучшая объектно-ориентированная среда по сравнению с C++. Эта высокая оценка, возможно, объясняется той основой на которой развивался Pascal (если не говорить о том, что он был разработан лучшей в отрасли командой)." (Джон Матчо, Дэвид Р.Фолкнер. Delphi:Пер.с англ.-М.Бином,1995.-464 с.)
                                                                                                      А что еще можно ожидать прочитать в книге о Delphi? Что Delphi - отстой?
                                                                                                      Цитата
                                                                                                      Pascal является более строгим языком, чем C. Любое несоответствие правилам построения программы, типам данных вызовет ошибку компилятора.
                                                                                                      В C/C++ - аналогично. Несоответствие правилам вызовет ошибку.
                                                                                                      Цитата
                                                                                                      В Pascal существуют понятия головной программы, процедуры и функции. В языке C все это вместе взятое есть функции и требуется написание программы подгонять под это понятие.
                                                                                                      Этого теста я не понял. На любом языке написание программы требуется подгонять под его понятия.
                                                                                                      Пятый пункт тоже непонятен. Что автор вообще хотел сказать?
                                                                                                      Цитата
                                                                                                      А вы попробуйте взять и написать программу на этих языках, которая из строки 'Иванов Иван Иванович' выделит 5-6 и 10-13 символы и сложит их вместе (ответ: 'ован И'), и обязательно положите рядом часы. На Pascale программист на эту программу затратит не более 5-ти минут, а вот на C значительно больше. Не верите?
                                                                                                      Боюсь, что я на такую программу также затрачу не более 5 минут на C.
                                                                                                      Цитата
                                                                                                      Далее, в языке С отсутствует интервальный тип данных.
                                                                                                      Ну наконец-то что-то реальное. Но в реальности малозначительное. Где гарантия, что после буквы 'А' идет буква 'Б' и между ними не вклинился какой-то другой ненужный символ? Учитывая кроссплатформенность C такой гарантии никто не даст.
                                                                                                      Цитата
                                                                                                      Следует отметить опасности в языке Си, связанные с применением типа данных float даже в несложных арифметических выражениях:
                                                                                                      Всегда можно найти пример, где паскалевский real с таким же успехом уйдет в переполнение/ноль/потерю точности. Я, например, всегда использую double. Но иногда и его точности не хватает, приходится использовать 10-байтовый long double. 6-байтовый real тут отнозначно будет в том самом месте.
                                                                                                      Цитата
                                                                                                      Применяя тип данных float в языке Си мы должны сначала написать программу, отладить ее, решить тестовые примеры, и только тогда принять решение о целесообразности типа данных float, в противном случае в программу потребуется внести изменения, данные типа float заменить на double.
                                                                                                      Человек ничего не знает о typedef?
                                                                                                      Цитата
                                                                                                      Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля.
                                                                                                      Это автоматизм, приобретаемый умным человеком после прочтения книги и написания первой же программы, использующей массивы.
                                                                                                      И т.д. и т.п. Что-то у человека не сложилось и он вымещает это на C. :D
                                                                                                        Цитата
                                                                                                        Ну наконец-то что-то реальное. Но в реальности малозначительное. Где гарантия, что после буквы 'А' идет буква 'Б' и между ними не вклинился какой-то другой ненужный символ?

                                                                                                        например, буква "ё" выбивается :).
                                                                                                          Кстати, интервальный тип можно достаточно просто замутить на шаблонах. Если уж очень хочется.
                                                                                                            Цитата trainer, 13.03.2006, 09:49:48, 1042146
                                                                                                            А вы попробуйте взять и написать программу на этих языках, которая из строки 'Иванов Иван Иванович' выделит 5-6 и 10-13 символы и сложит их вместе (ответ: 'ован И'), и обязательно положите рядом часы. На Pascale программист на эту программу затратит не более 5-ти минут, а вот на C значительно больше. Не верите?
                                                                                                            Боюсь, что я на такую программу также затрачу не более 5 минут на C.


                                                                                                            как я уже говорил, для примитивных прог бейсик рулит:
                                                                                                            ExpandedWrap disabled
                                                                                                              Dim a As String, b As String
                                                                                                              a = "Иванов Иван Иванович"
                                                                                                              b = Mid(a, 5, 2) & Mid(a, 10, 4)
                                                                                                              MsgBox b

                                                                                                            что-то ДЕЙСТВИТЕЛЬНО сложное/таймкритичное конечно лучше писАть на Си, но такие примитивы - бейсик рулит ещё раз :)


                                                                                                            Цитата trainer, 13.03.2006, 09:49:48, 1042146
                                                                                                            Цитата
                                                                                                            Pascal является более строгим языком, чем C. Любое несоответствие правилам построения программы, типам данных вызовет ошибку компилятора.

                                                                                                            Врядли бессмысленную требовательность к синтаксису следует считать преимуществом :) Происходит она из тех времён, когда паскаль придумали для "заставляния" студентов писАть структурированно.

                                                                                                            Цитата trainer, 13.03.2006, 09:49:48, 1042146
                                                                                                            Цитата
                                                                                                            В Pascal существуют понятия головной программы, процедуры и функции. В языке C все это вместе взятое есть функции и требуется написание программы подгонять под это понятие.
                                                                                                            Этого теста я не понял. На любом языке написание программы требуется подгонять под его понятия.
                                                                                                            Пятый пункт тоже непонятен. Что автор вообще хотел сказать?

                                                                                                            Он имел ввиду, что в Си всё - есть функции, а в паскале вместо функций, не возвращающих значения (void), применяют процедуры... Претензия надумана, хотя, с точки зрения структурированности, разница более значительна:
                                                                                                            функция - может полуучить какие-то входные данные и ДОЛЖНА вернуть полезный для дальнейшего применения результат.
                                                                                                            процедура - получает данные и выполняет действия. Возврат результатов в то место, откуда она была вызвана, с точки зрения паскальщиков, не нужен.

                                                                                                            Сишный подход к теме мне нравится больше :)

                                                                                                            Цитата trainer, 13.03.2006, 09:49:48, 1042146
                                                                                                            Цитата
                                                                                                            Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля.
                                                                                                            Это автоматизм, приобретаемый умным человеком после прочтения книги и написания первой же программы, использующей массивы.
                                                                                                            АГА. Я и сам периодически забываю, что в некоторых языках (в т.ч. и моём любимом VB), массивы нумеруются с единицы... какой гад это придумал? с нуля нумеровать намного правильнее и понятнее. :)
                                                                                                            Автоматизм не помогает - влияет давняя, ещё со времён Спектрума, привычка. (там дефолтное объявление массива начиналось с нуля.)
                                                                                                              Цитата BlackSnake @
                                                                                                              как я уже говорил, для примитивных прог бейсик рулит:

                                                                                                              И чем же это лучше
                                                                                                              ExpandedWrap disabled
                                                                                                                const
                                                                                                                  S = 'Иванов Иван Иванович';
                                                                                                                begin
                                                                                                                  ShowMessage(
                                                                                                                    Copy(S, 5, 2) + Copy(S, 10, 4));
                                                                                                                end;

                                                                                                              Тем что синтаксис вообще ни на один нормальный язык программирования не похож?
                                                                                                                Цитата Smike, 13.03.2006, 14:26:44, 1042444
                                                                                                                Тем что синтаксис вообще ни на один нормальный язык программирования не похож?


                                                                                                                я тоже не могу понять, почему синтаксис паскаля не похож ни на один нормальный язык :)
                                                                                                                  Цитата BlackSnake @
                                                                                                                  я тоже не могу понять, почему синтаксис паскаля не похож ни на один нормальный язык :)

                                                                                                                  Ты передергиваешь :) Синтаксис Паскаля более похож на синтаксис Си и вообще на общепринятый синтаксис, в отличие от бейсика.
                                                                                                                    Пропишем BlackSnak'у ASM-терапию. После этого он паскаль и си полюбит всем сердцем ;)
                                                                                                                    Сообщение отредактировано: Rikkie -
                                                                                                                      Пропишем BlackSnak'у ASM-терапию
                                                                                                                      И исключительно в виде клизьм и пиявок!
                                                                                                                      Цитата
                                                                                                                      После этого он паскаль и си полюбит всем сердцем

                                                                                                                      Поцкаль - дедушка всех языков!
                                                                                                                      А за что си любить вабще не понимаю..
                                                                                                                        Цитата Flex Ferrum @
                                                                                                                        Кстати, интервальный тип можно достаточно просто замутить на шаблонах
                                                                                                                        Borland именно так и сделал. Эмуляция паскалевского set для Borland C++ Builder(чтобы работать с написанной на паскале VCL)
                                                                                                                        ExpandedWrap disabled
                                                                                                                          template<class T, unsigned char minEl, unsigned char maxEl> class RTL_DELPHIRETURN SetBase
                                                                                                                            {
                                                                                                                            protected:
                                                                                                                              unsigned char Data[((((int)(maxEl/8))-((int)(minEl/8))+1) != 3)?
                                                                                                                                   (((int)(maxEl/8))-((int)(minEl/8))+1): 4];
                                                                                                                            };
                                                                                                                           
                                                                                                                            template<class T, unsigned char minEl, unsigned char maxEl> class RTL_DELPHIRETURN Set : SetBase<T, minEl, maxEl>
                                                                                                                            {
                                                                                                                          ...
                                                                                                                          };
                                                                                                                          Цитата Rikkie, 13.03.2006, 15:28:48, 1042496
                                                                                                                          Пропишем BlackSnak'у ASM-терапию. После этого он паскаль и си полюбит всем сердцем


                                                                                                                          не люблю интеловский асм... зилоговский мне роднее и вообще имхо более красивый :)
                                                                                                                            Цитата BlackSnake @
                                                                                                                            АГА. Я и сам периодически забываю, что в некоторых языках (в т.ч. и моём любимом VB), массивы нумеруются с единицы... какой гад это придумал? с нуля нумеровать намного правильнее и понятнее.
                                                                                                                            :unsure: Из MSDN:
                                                                                                                            Цитата
                                                                                                                            In Visual Basic 6.0, the default lower bound of every dimension of an array is 0. You can change this to 1 with the Option Base statement. You can also override the default lower bound in individual array declarations.
                                                                                                                            ...
                                                                                                                            In Visual Basic .NET, the lower bound of every array dimension is 0, and you cannot declare it to be otherwise. The Option Base statement is not supported.
                                                                                                                            Другое дело, что в C/C++ в размерности указывается количество элементов, а в VB - индекс последнего элемента. Это помнится в более ранних версиях нумеровалось с 1 и для совместимости ввели Option Base.
                                                                                                                            Кстати, и сама Borland и сторонние разработчики компонентов для Delphi нередко используют для массивов нумерацию с 0. Видимо потому, что это очень неудобно для некоторых статьеписателей. :lol:
                                                                                                                              trainer, оппля... нифига се... интересно, откуда я уверен в обратном... :wacko: :wall: :whistle:
                                                                                                                              дело в том что я последние несколько лет не пользуюсь неявными объявлениями массивов, типа Dim a(100) ... именно потому что помню что есть трабл какой-то...
                                                                                                                              Пользуюсь форматом Dim a(0 To 100) ... т.е. жестко задаются верхний и нижний индексы...

                                                                                                                              мля... буду искать, в какой книге мне встретилось упоминание что в VB дефолтная нумерация с 1 :blink: >:( :unsure:

                                                                                                                              Во влип так влип :(

                                                                                                                              хотя с другой стороны явное объявление массивов - привычка хорошая и отказываться не стану. :)
                                                                                                                                Цитата BlackSnake @
                                                                                                                                не люблю интеловский асм... зилоговский мне роднее и вообще имхо более красивый
                                                                                                                                какая разница, чей асм?... Дать тебе чужие коды и ковыряйся, разбирайся... а еще лучше код без комментариев :) жестоко, конечно, но практично
                                                                                                                                  Цитата Rikkie, 14.03.2006, 09:11:04, 1043166
                                                                                                                                  какая разница, чей асм?... Дать тебе чужие коды и ковыряйся, разбирайся... а еще лучше код без комментариев


                                                                                                                                  а как я асму, по-твоему, учился? именно так... дизасм в ручонки и фперёд... с 92 по 96 года, на ещё Спектруме... потому и люблю зилоговский асм... он мне роднее...
                                                                                                                                    В Советской России асм любит тебя! (Как говорят на слэшдоте)
                                                                                                                                      Smike писал:
                                                                                                                                      ExpandedWrap disabled
                                                                                                                                        const  S = 'Иванов Иван Иванович';begin  ShowMessage(    Copy(S, 5, 2) + Copy(S, 10, 4));end;


                                                                                                                                      ТРОЙНОЕ НЕ ТАК!!!

                                                                                                                                      ФОТ КАК:

                                                                                                                                      ExpandedWrap disabled
                                                                                                                                        var i : shortstring;
                                                                                                                                        begin
                                                                                                                                        i := 'Иванофф'+ 'Ифан' + 'Иффанович';


                                                                                                                                      Пес фсякккиххх копи!!! это удел сиплюццплюццееффццефф...
                                                                                                                                        Цитата микроха @
                                                                                                                                        Пес фсякккиххх копи!!! это удел сиплюццплюццееффццефф...
                                                                                                                                        std::string ;)
                                                                                                                                          микроха
                                                                                                                                          Да будет Вам известно, уважаемый, в С++ можно переопределить поведение оператора так, как нам хочется,и получится

                                                                                                                                          ExpandedWrap disabled
                                                                                                                                            string str;
                                                                                                                                            str = "bla-bla" + "foo" + "bar";
                                                                                                                                            Цитата maddy @
                                                                                                                                            микроха
                                                                                                                                            Да будет Вам известно, уважаемый, в С++ можно переопределить поведение оператора так, как нам хочется,и получится

                                                                                                                                            ExpandedWrap disabled
                                                                                                                                              string str;
                                                                                                                                              str = "bla-bla" + "foo" + "bar";

                                                                                                                                            В этой фразе есть одна фактологическая неточность. Пример не скомпилируется. Одно из слагаемых должно быть строкой, а не char[]. Т.е.:
                                                                                                                                            ExpandedWrap disabled
                                                                                                                                              string str;
                                                                                                                                              str = string("bla-bla")+"foo"+"bar";
                                                                                                                                              mo3r
                                                                                                                                              извините, наскоряк писал :)
                                                                                                                                                TODO:
                                                                                                                                                Cлифф засчитан!
                                                                                                                                                  Цитата микроха @
                                                                                                                                                  Cлифф засчитан!
                                                                                                                                                  У тебя слифф??? Ничего, в наше время все лечится ;)
                                                                                                                                                    Цитата
                                                                                                                                                    ТРОЙНОЕ НЕ ТАК!!!

                                                                                                                                                    Так оно ж на выборах не прошло...
                                                                                                                                                      Цитата микроха @
                                                                                                                                                      ТРОЙНОЕ НЕ ТАК!!!

                                                                                                                                                      ФОТ КАК:

                                                                                                                                                      var i : shortstring;
                                                                                                                                                      begin
                                                                                                                                                      i := 'Иванофф'+ 'Ифан' + 'Иффанович';

                                                                                                                                                      Пес фсякккиххх копи!!! это удел сиплюццплюццееффццефф...

                                                                                                                                                      Уважаемый, что то я юмора не понял. Что значит без вских копи?
                                                                                                                                                      Напомню условие.


                                                                                                                                                      Цитата BlackSnake @
                                                                                                                                                      А вы попробуйте взять и написать программу на этих языках, которая из строки 'Иванов Иван Иванович' выделит 5-6 и 10-13 символы и сложит их вместе (ответ: 'ован И'), и обязательно положите рядом часы. На Pascale программист на эту программу затратит не более 5-ти минут, а вот на C значительно больше. Не верите?
                                                                                                                                                      Боюсь, что я на такую программу также затрачу не более 5 минут на C.
                                                                                                                                                        А ффы мне ково циттироффали? Псефдокодовцца и фаськовццца?
                                                                                                                                                        Так он в сливах! Которые поспели в ццаду у дядди ФФФаани..
                                                                                                                                                          Цитата Evil J, 13.04.2006, 20:22:36, 1076282
                                                                                                                                                          Цитата (BlackSnake @ 13.03.06, 15:59)


                                                                                                                                                          Эй! это не моя реплика!!!
                                                                                                                                                            Цитата микроха @
                                                                                                                                                            А ффы мне ково циттироффали? Псефдокодовцца и фаськовццца?
                                                                                                                                                            Так он в сливах! Которые поспели в ццаду у дядди ФФФаани..

                                                                                                                                                            Это не ответ.

                                                                                                                                                            Цитата BlackSnake @
                                                                                                                                                            Эй! это не моя реплика!!!

                                                                                                                                                            В курсе. Прошу прощения, но я так и не нашел, откуда это было сцитировано.
                                                                                                                                                            Потому сцитировал ваш и благополучно забыл переправить автора на trainer.
                                                                                                                                                              Evil J - ой да фы слиффоффки апклюкались! Малаццца!

                                                                                                                                                              Добавлено
                                                                                                                                                              :lol: ржалнемог! :lol:
                                                                                                                                                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                                              0 пользователей:


                                                                                                                                                              Рейтинг@Mail.ru
                                                                                                                                                              [ Script execution time: 0,1517 ]   [ 15 queries used ]   [ Generated: 27.04.24, 08:55 GMT ]