Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.157.186] |
|
Сообщ.
#1
,
|
|
|
Кто ещё захочет создать тему 'Pascal против C++' прочитайте вот это и задумайтесь. Зерно истины там есть. А так - слушайте свое сердце, а ещё больше - РАЗУМ!!!
Удачи. ЗЫ Тема открыта для комментариев!!! http://a-vaulin.chat.ru/cpas_maligin.html |
Сообщ.
#2
,
|
|
|
Статья не очень интересная.
Цитата Сравнение двух языков программирования ни к чему не приведет. .. Не критикой своего коллеги заниматься нужно, мол, не на том языке он программу написал, следовательно, уровень его не соответствует принятым международным понятиям и нормам. самая здравая мысль 1) крикливая, это самый главный минус 2) автор постоянно путает C и С++. Это совершенно РАЗНЫЕ языки. Большинство его нападок на С недействительны в С++. 3) видимо, он не очень хороший программист. Потому что усраивался в непонятно какую контору. "Борланд не компания" . C++ он и в Африке С++. Что от МС, что от Борланд, что от GNU. Все НОРМАЛЬНЫЕ работодатели это знают, а с ненормальными связывается сами знаете кто 4) Цитата Представим себе две столярных мастерских. дальше остапа пронесло так, что я ниасилил 5) Цитата Далее, в языке С отсутствует интервальный тип данных. чуть ли не единственный пункт, являющийся действительно фундаментальной недоработкой, но к счастию, умельцы легко обходят эту чтуку. 6) Цитата Можно совершенно безбоязненно применять тип данных real. бред. Он даже не сравнил разрядность этих 2-х типов. Паскалёвский real - 6-и байтный, поэтому заведомо точнее C-шного 4-х байтного float Явный незачёт 7) Цитата Конструкция оператора-переключателя switch в языке Си по сравнению с оператором варианта case в Паскале оформлена хуже, т.к. требуется в каждой строке писать case.... break; а можно не писать. Аффтар видимо не в курсе 8) Цитата Работа с указателями в Паскале лучше организована, проще, логичнее, понятнее, строже. //Пример на Си: int *k; можно написать *k=10; или k=10; аффтар явно не в курсе, что такое ссылочный тип в С++ |
Сообщ.
#3
,
|
|
|
Интересно автор сводит мощь и гибкость C к его недостаткам. Статья необъективна. Автору засчитываем слив.
|
Сообщ.
#4
,
|
|
|
ну, вообще то про с-шные строки человек всё заметил справедливо.
К счастию, в C++ у нас есть std::string |
Сообщ.
#5
,
|
|
|
Я не вдавался в подробности, я просто отметил мысль, что компании навязывают часто свои продукты... Вот в этом здравое есть зерно. Ну а ещё в том, что каждый должен выбрать себе свое и совершенствоваться в этом.
Добавлено А про тип float он прав? Просто негде проверить.... |
Сообщ.
#6
,
|
|
|
Цитата Сколько же нужно искать по тексту С-программы то место, где объявлена требуемая переменная, какая из них локальная или глобальная. Что в этом хорошего? Нисколько. Переменная объявлена там, где используется. А как часто нужно прыгать к началу функции для того, чтобы добавить нужную переменную? Цитата Действительно это так.Далее, в языке С отсутствует интервальный тип данных. Цитата Получается интересная картина. Применяя тип данных float в языке Си мы должны сначала написать программу, отладить ее, решить тестовые примеры, и только тогда принять решение о целесообразности типа данных float, в противном случае в программу потребуется внести изменения, данные типа float заменить на double. Во-первых, это мягко говоря чушь, а во-вторых, double требует в два раза больше памяти. А на самом деле - лишь возможность выбора. Нужна точная арифметика - получите. Нужна "неточная" - получите. Но и там и там есть погрешность. Цитата Каждый программист, начинающий программировать на С - вполне возможно. Но не опытный сишник.Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля. Цитата Работа с указателями в Паскале лучше организована, проще, логичнее, понятнее, строже. //Пример на Си: int *k; можно написать *k=10; или k=10; компилятор не показывает ошибку. А тут и нет никакой ошибки. Он резонно считает, что программист инициализирует указатель адресом соответствующей ячейки памяти. Что в этом плохого? Цитата Автор явно не знает - что такое потоки (iostreams). Работа с файлами в Паскале организована проще, понятнее, все разложено по "полочкам", а программисту остается для написания фрагментов программы затратить минимум времени. |
Сообщ.
#7
,
|
|
|
Цитата А как часто нужно прыгать к началу функции для того, чтобы добавить нужную переменную? ну, это не очень страшно, если вовремя отстреливать авторов, пишуших функции длиннее экрана Добавлено Цитата А про тип float он прав? Просто негде проверить.... Да, с-шный float такой неточный. Но учти, что именно он является "родным" например, для видекарточек. Паскалёвский банально длиннее. Он 6-и байтный. В Дельфи он называется real48. Почти нигде не используется |
Сообщ.
#8
,
|
|
|
Автор статьи просто клоун. Ему можно лишь порекомендовать последовать примеру Томми.
Цитата Flex Ferrum @ Далее, в языке С отсутствует интервальный тип данных. Действительно это так. Простите мне мою серость, но зачем он нужен? Типобезопасности С он не добавит, а С++ прекрасно обходятся и без него. |
Сообщ.
#9
,
|
|
|
Цитата Relan @ Простите мне мою серость, но зачем он нужен? Типобезопасности С он не добавит, а С++ прекрасно обходятся и без него. Иногда (не всегда, но бывает) действительно необходим тип данных типа множества из паскаля. Т. е. множество, существующее еще на этапе компиляции. |
Сообщ.
#10
,
|
|
|
Цитата Вопрос: зачем тогда всю эту бодягу разводить надо было? Сделана попытка рассмотреть только некоторые базовые элементы языков Паскаль и Си. Как нельзя однозначно утверждать что лучше, лето или зима, так нельзя утверждать какой язык лучше, Паскаль или Си. Нравится Паскаль, нравится Си и слава богу. Программируйте на том языке, какой Вы выбрали. |
Сообщ.
#11
,
|
|
|
Я бы на месте автора ещё ушат грязи на С-шные макросы вылил
|
Сообщ.
#12
,
|
|
|
Цитата BugHunter @ Судя по уровню знания автором (точнее аффтаром) языка С, он о существовании макросов просто не догадывается. Кстати, не понимаю, почему так принято ругать макросы? При грамотном использовании они превращаются в очень мощный инструмент, так же как и другие средства языка. ЕМНИП, Ритчи сказал: "Си -- это острая бритва. С его помощью можно сделать красивую программу, а можно кровавое месиво." ИМХО этим всё сказано. Я бы на месте автора ещё ушат грязи на С-шные макросы вылил |
Сообщ.
#13
,
|
|
|
Цитата интересно, если это так неудобно то почему почти во всех новых языках промышленного уровня используется именно такая нотация ? Элементы массивов в языке Си нумеруются, начиная с 0. Это - мелочь, но удобным это назвать никак нельзя. Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля |
Сообщ.
#14
,
|
|
|
Да ладно вам чувака критиковать.. Ну не взяли его на работу, потому что знал паскаль, а нужен был си. Вот чувак и разчуйствовался.
|
Сообщ.
#15
,
|
|
|
Цитата Antoxa1985 @ Цитата интересно, если это так неудобно то почему почти во всех новых языках промышленного уровня используется именно такая нотация ?Элементы массивов в языке Си нумеруются, начиная с 0. Это - мелочь, но удобным это назвать никак нельзя. Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля Наверное, это по инерции или по привычке. А может, для обеспечения простоты перехода от одного языка к другому. В некоторых случаях удобнее иметь массивы, начинающиеся не от 0. AFAIK, так не во всех языках. |
Сообщ.
#16
,
|
|
|
Цитата mo3r, 28.02.2006, 07:51:11, 1028872 Элементы массивов в языке Си нумеруются, начиная с 0. Это - мелочь, но удобным это назвать никак нельзя. Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля имхо, достаточно просто один раз запомнить, как в _определённом_ языке задаются массивы... а мне вообще нравится VB, там массив можно задать так: Dim arrData(5 To 9) Скрытый текст зы. паскаль - не язык, а средство насилия над мозгом программера. |
Сообщ.
#17
,
|
|
|
Цитата BlackSnake @ имхо, достаточно просто один раз запомнить, как в _определённом_ языке задаются массивы... а мне вообще нравится VB, там массив можно задать так: Dim arrData(5 To 9) Цитата BlackSnake @ кой-кому надо устроить терапию алгоритмами с fixed-point Скрытый текст: |
Сообщ.
#18
,
|
|
|
Цитата BlackSnake @ зы. паскаль - не язык, а средство насилия над мозгом программера. |
Сообщ.
#19
,
|
|
|
Цитата BlackSnake @ зы. паскаль - не язык, а средство насилия над мозгом программера. Зря. Достаточно красивый, понятный и мощный язык (не в пример тому же VB (VBA), например). |
Сообщ.
#20
,
|
|
|
Судя по всему автор не различает C и C++, т. к. в C < C99 нельзя объявлять переменные в произвольном месте -- только в начале блока (или как там называется конструкция внутри {}).
Цитата Flex Ferrum @ Иногда (не всегда, но бывает) действительно необходим тип данных типа множества из паскаля. Т. е. множество, существующее еще на этапе компиляции. Тогда давайте сразу вспомним, что это множество не может состоять более чем из 256 элементов, что сильно сказвается на его полезности отнють не в лучшую сторону. |
Сообщ.
#21
,
|
|
|
Цитата linuxfan @ Тогда давайте сразу вспомним, что это множество не может состоять более чем из 256 элементов, что сильно сказвается на его полезности отнють не в лучшую сторону. Ты видимо не понимаешь, в чем полезность множеств. |
Сообщ.
#22
,
|
|
|
Цитата Ты видимо не понимаешь, в чем полезность множеств. Но не до 256 элементов. Посмотрели бы вы на питонячую реализацию... :) |
Сообщ.
#23
,
|
|
|
Ни в коем разе не желаю никого обидеть, но повторю то, что говорил уже не один раз. Если кому влом читать - переходите сразу к последней строчке.
даже Бейсик - язык... и Форт - язык... и пхп с перлом - языки... (несмотря на то, что субъективно мне перл не нравится) да блин, даже Ява-скрипт - язык программирования! (кого не назвал, не обижайтесь) а Си - мега-язык хотя Асм ещё более мега-язык а вот Паскаль - это не язык программирования, а франкенштейновское чудовище, созданное с единственной целью - зас*рать студентам мозги принципами структурирования (кто не верит - почитайте что-нить о истории языков)... Изначально в паскале только и были, что структурные элементы (типа циклов и условных и безусловных переходов. case не было.), оператор ввода с клавы и оператор вывода, да несколько мат. операций. (а, ещё было обязательное объявление всего, даже и так понятного) Только намного позже, когда подросло первое поколение затр@х@нных Паскалем студентов, они (бывшие студенты) начали наворовывать в паскаль прочие полезняки из других языков, но поскольку они были жестоко замучены Паскалем, выбросить его геморройные и излишние элементы у них не хватило духу... вообще же - паскаль это ни то, ни сё... слишком сложен для простых задач и слишком слаб для сложных. если мне понадобится например, хитрый калькулятор, я его буду писАть на VB, ибо так проще. Если мне понадобится драйвер - буду материться над каждой строкой (ибо если честно - в Си я не особенно силён), но драйвер я буду писАть на Си. Если мне понадобится серверное приложение - буду писать на ПХП. А у паскальщиков один ответ на всё: "Делфя рулит, ибо она универсальна, а я других языков фсё равно не знаю, ибо паскаль крут". Соответственно, паскальщик напишет простой калькулятор за то время, за которое я напишу такой же на VB дважы, а драйвер напишет чуть быстрее, чем хороший программер на Си, зато его паскальный драйвер будет втрое больше весить и вдвое медленнее работать. (а уж про делфийские CGI-приложения мне и говорить-то противно...) Вывод. Паскаль не умер, ибо не рождался, но паскаль мёртв от рождения. А теперь ответть не вопрос: как называют человека, имеющего сношение с покойником? [блин, почему в стандартных смайлах нет смайла "меня тошнит"?] |
Сообщ.
#24
,
|
|
|
Цитата BlackSnake @ к твоему сведению, далеко не все здесь любители авангарда.франкенштейновское чудовище, созданное с единственной целью - зас*рать студентам мозги принципами структурирования Цитата BlackSnake @ была одна веселая статейка, типа интервью с Керниганом (или Ричи), где говорилось, что С придумали ради стеба... кто не верит - почитайте что-нить о истории языков Цитата BlackSnake @ На Паскале пишут, и довольно успешно. А ты говоришь про трупы. Вывод. Паскаль не умер, ибо не рождался, но паскаль мёртв от рождения. |
Сообщ.
#25
,
|
|
|
Цитата Rikkie @ На дату статьи ты внимания не обратил? была одна веселая статейка, типа интервью с Керниганом (или Ричи), где говорилось, что С придумали ради стеба... |
Сообщ.
#26
,
|
|
|
Цитата Rikkie @ была одна веселая статейка, типа интервью с Керниганом (или Ричи), где говорилось, что С придумали ради стеба... Статейка эта была сама по себе стебная. |
Сообщ.
#27
,
|
|
|
Цитата Relan @ обратил, обратил На дату статьи ты внимания не обратил? Цитата Flex Ferrum @ на то и намекалось Статейка эта была сама по себе стебная. Добавлено Это к слову о Цитата BlackSnake @ зас*рать студентам |
Сообщ.
#28
,
|
|
|
Наш ответ Чемберлену:
Цитата От: 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-й версии делфи, поэтому если у кого одна из этих ужасно любимых фич не пойдет на другой версии — не расстраивайтей, всегдя найдется что полюбить в замен, на то это и делфи! |
Сообщ.
#29
,
|
|
|
Цитата BlackSnake @ вообще же - паскаль это ни то, ни сё... слишком сложен для простых задач и слишком слаб для сложных. Давай аргументированнно, а? Цитата BlackSnake @ если мне понадобится например, хитрый калькулятор, я его буду писАть на VB, ибо так проще. А как калькулятор с парсером выражений, осилишь, даже если на VB? И насколько быстрее чем я на Дельфи? |
Сообщ.
#30
,
|
|
|
Цитата Smike @ Калькулятор с парсером выражений (типа bc) на Перле: А как калькулятор с парсером выражений, осилишь, даже если на VB? И насколько быстрее чем я на Дельфи? while ($_ = <>) { chomp; print eval($_), "\n"; } |
Сообщ.
#31
,
|
|
|
Цитата Relan @ Теперь вы оба напишите такой же на Бейсике и на Дельфи. Время пошло. Ага, а пользовательские функции, кастомные форматы чисел и константы, а также плагины к нему есть? |
Сообщ.
#32
,
|
|
|
Цитата Smike @ Ага, а пользовательские функции, кастомные форматы чисел и константы, а также плагины к нему есть? А ты уже написал калькулятор, который понимает +, -, /, *, и еще докучи стандартных перловых примочек? Тогда ты упустил начальные этапы проектирования |
Сообщ.
#33
,
|
|
|
Это к перлу? Если да, то
Цитата Ага, а пользовательские функции, Само собой. Цитата кастомные форматы чисел Объектами реализуемо. Цитата и константы, Обижаешь! Цитата а также плагины к нему есть? Что такое "плагины", не знаю, а модули есть и много, см. CPAN. |
Сообщ.
#34
,
|
|
|
Кстати, Python рулит.
Вот калькулятор на нём: http://gazette.linux.ru.net/lg78/articles/rus-krishnakumar.html |
Сообщ.
#35
,
|
|
|
У-у-у. Народ уже совсем юмора не понимает...
|
Сообщ.
#36
,
|
|
|
Relan понимает. Это я для пасквилисто-депхинистов заначил:)
|
Сообщ.
#37
,
|
|
|
Lucifer, то, что макросам в С++ не место, с этим я согласен. Но вот в С они вписываются очень и очень органично.
|
Сообщ.
#38
,
|
|
|
Цитата Lucifer, то, что макросам в С++ не место, с этим я согласен. Но вот в С они вписываются очень и очень органично. Макросы - это разговоры в пользу бедных. В сях ничего более цивилизованного нету, вот и приходится. Это видимо такая привычка линуксоидов: "если мы должны с этим работать, то мы должны это полюбить" Единственное место, где без макросов было совсем тяжко - это декларация карт сообщений в MFC . Если ты ещё не веришь в ужос макросов, попробуй, например, с помощью макроса A2W преобразовать в юникод мегабайт 5 текста . Он упадёт именно потому, что он - макрос . См. так же тему DrUnkarda в Многошуме о том, как чуваки из MS зажигают . ..В общем, макросам - не место в жизни современного человека. |
Сообщ.
#39
,
|
|
|
Цитата BugHunter @ Хантер, не соглашусь. ..В общем, макросам - не место в жизни современного человека. Контр-пример: #ifdef _DEBUG #define DEBUG_PRINT(x) printf(x) #else #define DEBUG_PRINT(x) #endif Еще контр-пример: Писал я когда-то модуль сбора статистики по алгоритмам на fixed-point. Модуль представлял собой класс, в котором определялись базовые арифметические операции, там же подсчитывалось на какой строке возникали насыщения etc. Без макросов этот вопрос не решается никак. Если будешь запрашивать строку в коде из перегруженного оператора, то он тебе выдаст номер строки в реализации перегруженного оператора. Поэтому приходилось использовать макросы. Т.ч. не следует считать макросы атавизмом. Просто злоупотреблять не надо. Всему свое место. |
Сообщ.
#40
,
|
|
|
Цитата Хантер, не соглашусь. Контр-пример: ну, это не совсем макросы . точнее - безобидные я канешно, имел в виду функции-макросы, а не макроопределения ..и тоже ведь можно нарваться . Поэтому и выносить их желательно только в настройки проекта. Поэтому то что ты с условной компиляцией привёл - это не совсем макросы . Цитата Если будешь запрашивать строку в коде из перегруженного оператора, то он тебе выдаст номер строки в реализации перегруженного оператора. у, тут ещё вспомнил про макроопределения __FILE__ и __LINE__, тоже полезно бывает. ..опять таки, уже всё что нужно - уже имеется в готовом виде. Но заметь, что для C, что для C++ все приведённые примеры совершенно одинаково полезны А я же имел в виду возражение против фразы " в C они очень к месту ". |
Сообщ.
#41
,
|
|
|
Цитата BugHunter @ А что же это? Поэтому то что ты с условной компиляцией привёл - это не совсем макросы Цитата Rikkie @ Я же могу еще функциональности добавить, которая только в debug-режиме потребуется.#define DEBUG_PRINT(x) printf(x) Цитата BugHunter @ ты меня понял. у, тут ещё вспомнил про макроопределения __FILE__ и __LINE__, тоже полезно бывает. Цитата BugHunter @ Я видел более категоричное утверждение А я же имел в виду возражение против фразы " в C они очень к месту ". |
Сообщ.
#42
,
|
|
|
Цитата BugHunter @ Хм... Как это в многошуме? Она же в моем разделе была? См. так же тему DrUnkarda в Многошуме о том, как чуваки из MS зажигают |
Сообщ.
#43
,
|
|
|
И в моём тоже. В твоём она была более информативна
Добавлено Цитата А что же это? Да как тебе сказать.. если используется условная компиляция, то обычно не принято писать #define прямо в .cpp и .h файлах (ибо чревато), а выносить в настройки проекта (есть там такая чтука - preprocessor definitions), поэтому как то рука не поворачивается назвать это макросом - в настройках проекта они имеют спец свойство - видны во всех файлах проджекта, поэтому более безопасны, что ли |
Сообщ.
#44
,
|
|
|
Цитата BugHunter @ кхммм... я понимаю в этом месте _DEBUG, там ему и место, но размещать DEBUG_PRINT в preprocessor definitions .... мало ли что DEBUG_PRINT делает, может у него вывод какой-то хитро-сложный, может там еще какие-то данные ворочаются. Да может этот дебаг-принт в других ед.тр нафинг не нужен.... к тому же этот дебаг-принт - наиболее простой пример, можно еще сложнее найти. есть там такая чтука - preprocessor definitions |
Сообщ.
#45
,
|
|
|
Честно говоря, этот DEBUG_PRINT(x) можно легко заменить на inline функцию. Так что здесь он как бы э.. не к месту.
Всё равно этот x будет вычисляться даже в release версии (никуда не деться, вот так вот фигово). Так шо - инлайн функция с пустым лелом в release спасут отца. Да и как то некошерно, лучше что нибудть такое: #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 ....по крайней мере я не вижу, почему твой вариант с макросом в данном случае будет работать лучше (или быстрее, или удобнее) |
Сообщ.
#46
,
|
|
|
В большинстве случаев, действительно, достаточно инлайн-функции. Но есть еще случаи с тем же __LINE__ или когда в дебаге нужно достучаться то членов класса. В последнем случае можно инлайн-функцию сделать другом класса, но лишние захламления тоже нездорово.
|
Сообщ.
#47
,
|
|
|
Цитата BugHunter @ Всё равно этот x будет вычисляться даже в release версии Как раз в макросе ничего вычисляться не будет. А вот аргументы inline-функции вычисляются. По крайней мере если имеют побочные эффекты. С другой стороны при использовании макроса отладочная и релизная версии могут по-разному работать |
Сообщ.
#48
,
|
|
|
Цитата Как раз в макросе ничего вычисляться не будет. ? что за компилятор?.. Для MSVC++ 6 - аргумент вычислялся. ..сейчас в 7-е гляну. |
Сообщ.
#49
,
|
|
|
Цитата BugHunter @ что за компилятор?.. Для MSVC++ 6 - аргумент вычислялся. ..сейчас в 7-е гляну. В любом нормальном компиляторе результат вычисляться не будет. На то он и препроцессор. |
Сообщ.
#50
,
|
|
|
Забавно то, что объектно-ориентированный Delphi(ObjectPascal) все время норовят сравнивать не с объектно-ориентированным C++, а с представителем предыдущего поколения C. Паскаль надо сравнивать с C, ObjectPascal - с C++.
Цитата А что еще можно ожидать прочитать в книге о Delphi? Что Delphi - отстой?"Pascal фирмы Borland стал объектно-ориентированным в версии 5.5 и долго рассматривался как лучшая объектно-ориентированная среда по сравнению с C++. Эта высокая оценка, возможно, объясняется той основой на которой развивался Pascal (если не говорить о том, что он был разработан лучшей в отрасли командой)." (Джон Матчо, Дэвид Р.Фолкнер. Delphi:Пер.с англ.-М.Бином,1995.-464 с.) Цитата В C/C++ - аналогично. Несоответствие правилам вызовет ошибку.Pascal является более строгим языком, чем C. Любое несоответствие правилам построения программы, типам данных вызовет ошибку компилятора. Цитата Этого теста я не понял. На любом языке написание программы требуется подгонять под его понятия.В Pascal существуют понятия головной программы, процедуры и функции. В языке C все это вместе взятое есть функции и требуется написание программы подгонять под это понятие. Пятый пункт тоже непонятен. Что автор вообще хотел сказать? Цитата Боюсь, что я на такую программу также затрачу не более 5 минут на C.А вы попробуйте взять и написать программу на этих языках, которая из строки 'Иванов Иван Иванович' выделит 5-6 и 10-13 символы и сложит их вместе (ответ: 'ован И'), и обязательно положите рядом часы. На Pascale программист на эту программу затратит не более 5-ти минут, а вот на C значительно больше. Не верите? Цитата Ну наконец-то что-то реальное. Но в реальности малозначительное. Где гарантия, что после буквы 'А' идет буква 'Б' и между ними не вклинился какой-то другой ненужный символ? Учитывая кроссплатформенность C такой гарантии никто не даст.Далее, в языке С отсутствует интервальный тип данных. Цитата Всегда можно найти пример, где паскалевский real с таким же успехом уйдет в переполнение/ноль/потерю точности. Я, например, всегда использую double. Но иногда и его точности не хватает, приходится использовать 10-байтовый long double. 6-байтовый real тут отнозначно будет в том самом месте.Следует отметить опасности в языке Си, связанные с применением типа данных float даже в несложных арифметических выражениях: Цитата Человек ничего не знает о typedef?Применяя тип данных float в языке Си мы должны сначала написать программу, отладить ее, решить тестовые примеры, и только тогда принять решение о целесообразности типа данных float, в противном случае в программу потребуется внести изменения, данные типа float заменить на double. Цитата Это автоматизм, приобретаемый умным человеком после прочтения книги и написания первой же программы, использующей массивы.Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля. И т.д. и т.п. Что-то у человека не сложилось и он вымещает это на C. |
Сообщ.
#51
,
|
|
|
Цитата Ну наконец-то что-то реальное. Но в реальности малозначительное. Где гарантия, что после буквы 'А' идет буква 'Б' и между ними не вклинился какой-то другой ненужный символ? например, буква "ё" выбивается . |
Сообщ.
#52
,
|
|
|
Кстати, интервальный тип можно достаточно просто замутить на шаблонах. Если уж очень хочется.
|
Сообщ.
#53
,
|
|
|
Цитата trainer, 13.03.2006, 09:49:48, 1042146 А вы попробуйте взять и написать программу на этих языках, которая из строки 'Иванов Иван Иванович' выделит 5-6 и 10-13 символы и сложит их вместе (ответ: 'ован И'), и обязательно положите рядом часы. На Pascale программист на эту программу затратит не более 5-ти минут, а вот на C значительно больше. Не верите? Боюсь, что я на такую программу также затрачу не более 5 минут на C. как я уже говорил, для примитивных прог бейсик рулит: 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), массивы нумеруются с единицы... какой гад это придумал? с нуля нумеровать намного правильнее и понятнее. Цитата Это автоматизм, приобретаемый умным человеком после прочтения книги и написания первой же программы, использующей массивы.Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля. Автоматизм не помогает - влияет давняя, ещё со времён Спектрума, привычка. (там дефолтное объявление массива начиналось с нуля.) |
Сообщ.
#54
,
|
|
|
Цитата BlackSnake @ как я уже говорил, для примитивных прог бейсик рулит: И чем же это лучше const S = 'Иванов Иван Иванович'; begin ShowMessage( Copy(S, 5, 2) + Copy(S, 10, 4)); end; Тем что синтаксис вообще ни на один нормальный язык программирования не похож? |
Сообщ.
#55
,
|
|
|
Цитата Smike, 13.03.2006, 14:26:44, 1042444 Тем что синтаксис вообще ни на один нормальный язык программирования не похож? я тоже не могу понять, почему синтаксис паскаля не похож ни на один нормальный язык |
Сообщ.
#56
,
|
|
|
Цитата BlackSnake @ я тоже не могу понять, почему синтаксис паскаля не похож ни на один нормальный язык Ты передергиваешь Синтаксис Паскаля более похож на синтаксис Си и вообще на общепринятый синтаксис, в отличие от бейсика. |
Сообщ.
#57
,
|
|
|
Пропишем BlackSnak'у ASM-терапию. После этого он паскаль и си полюбит всем сердцем
|
Сообщ.
#58
,
|
|
|
Пропишем BlackSnak'у ASM-терапию
И исключительно в виде клизьм и пиявок! Цитата После этого он паскаль и си полюбит всем сердцем Поцкаль - дедушка всех языков! А за что си любить вабще не понимаю.. |
Сообщ.
#59
,
|
|
|
Цитата Flex Ferrum @ Borland именно так и сделал. Эмуляция паскалевского set для Borland C++ Builder(чтобы работать с написанной на паскале VCL)Кстати, интервальный тип можно достаточно просто замутить на шаблонах 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> { ... }; |
Сообщ.
#60
,
|
|
|
Цитата Rikkie, 13.03.2006, 15:28:48, 1042496 Пропишем BlackSnak'у ASM-терапию. После этого он паскаль и си полюбит всем сердцем не люблю интеловский асм... зилоговский мне роднее и вообще имхо более красивый |
Сообщ.
#61
,
|
|
|
Цитата BlackSnake @ Из MSDN:АГА. Я и сам периодически забываю, что в некоторых языках (в т.ч. и моём любимом VB), массивы нумеруются с единицы... какой гад это придумал? с нуля нумеровать намного правильнее и понятнее. Цитата Другое дело, что в C/C++ в размерности указывается количество элементов, а в VB - индекс последнего элемента. Это помнится в более ранних версиях нумеровалось с 1 и для совместимости ввели Option Base.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. Кстати, и сама Borland и сторонние разработчики компонентов для Delphi нередко используют для массивов нумерацию с 0. Видимо потому, что это очень неудобно для некоторых статьеписателей. |
Сообщ.
#62
,
|
|
|
trainer, оппля... нифига се... интересно, откуда я уверен в обратном...
дело в том что я последние несколько лет не пользуюсь неявными объявлениями массивов, типа Dim a(100) ... именно потому что помню что есть трабл какой-то... Пользуюсь форматом Dim a(0 To 100) ... т.е. жестко задаются верхний и нижний индексы... мля... буду искать, в какой книге мне встретилось упоминание что в VB дефолтная нумерация с 1 Во влип так влип хотя с другой стороны явное объявление массивов - привычка хорошая и отказываться не стану. |
Сообщ.
#63
,
|
|
|
Цитата BlackSnake @ какая разница, чей асм?... Дать тебе чужие коды и ковыряйся, разбирайся... а еще лучше код без комментариев жестоко, конечно, но практично не люблю интеловский асм... зилоговский мне роднее и вообще имхо более красивый |
Сообщ.
#64
,
|
|
|
Цитата Rikkie, 14.03.2006, 09:11:04, 1043166 какая разница, чей асм?... Дать тебе чужие коды и ковыряйся, разбирайся... а еще лучше код без комментариев а как я асму, по-твоему, учился? именно так... дизасм в ручонки и фперёд... с 92 по 96 года, на ещё Спектруме... потому и люблю зилоговский асм... он мне роднее... |
Сообщ.
#65
,
|
|
|
В Советской России асм любит тебя! (Как говорят на слэшдоте)
|
Сообщ.
#66
,
|
|
|
Smike писал:
const S = 'Иванов Иван Иванович';begin ShowMessage( Copy(S, 5, 2) + Copy(S, 10, 4));end; ТРОЙНОЕ НЕ ТАК!!! ФОТ КАК: var i : shortstring; begin i := 'Иванофф'+ 'Ифан' + 'Иффанович'; Пес фсякккиххх копи!!! это удел сиплюццплюццееффццефф... |
Сообщ.
#67
,
|
|
|
Цитата микроха @ std::string Пес фсякккиххх копи!!! это удел сиплюццплюццееффццефф... |
Сообщ.
#68
,
|
|
|
микроха
Да будет Вам известно, уважаемый, в С++ можно переопределить поведение оператора так, как нам хочется,и получится string str; str = "bla-bla" + "foo" + "bar"; |
Сообщ.
#69
,
|
|
|
Цитата maddy @ микроха Да будет Вам известно, уважаемый, в С++ можно переопределить поведение оператора так, как нам хочется,и получится string str; str = "bla-bla" + "foo" + "bar"; В этой фразе есть одна фактологическая неточность. Пример не скомпилируется. Одно из слагаемых должно быть строкой, а не char[]. Т.е.: string str; str = string("bla-bla")+"foo"+"bar"; |
Сообщ.
#70
,
|
|
|
mo3r
извините, наскоряк писал |
Сообщ.
#71
,
|
|
|
TODO:
Cлифф засчитан! |
Сообщ.
#72
,
|
|
|
Цитата микроха @ У тебя слифф??? Ничего, в наше время все лечится Cлифф засчитан! |
Сообщ.
#73
,
|
|
|
Цитата ТРОЙНОЕ НЕ ТАК!!! Так оно ж на выборах не прошло... |
Сообщ.
#74
,
|
|
|
Цитата микроха @ ТРОЙНОЕ НЕ ТАК!!! ФОТ КАК: var i : shortstring; begin i := 'Иванофф'+ 'Ифан' + 'Иффанович'; Пес фсякккиххх копи!!! это удел сиплюццплюццееффццефф... Уважаемый, что то я юмора не понял. Что значит без вских копи? Напомню условие. Цитата BlackSnake @ А вы попробуйте взять и написать программу на этих языках, которая из строки 'Иванов Иван Иванович' выделит 5-6 и 10-13 символы и сложит их вместе (ответ: 'ован И'), и обязательно положите рядом часы. На Pascale программист на эту программу затратит не более 5-ти минут, а вот на C значительно больше. Не верите? Боюсь, что я на такую программу также затрачу не более 5 минут на C. |
Сообщ.
#75
,
|
|
|
А ффы мне ково циттироффали? Псефдокодовцца и фаськовццца?
Так он в сливах! Которые поспели в ццаду у дядди ФФФаани.. |
Сообщ.
#76
,
|
|
|
Цитата Evil J, 13.04.2006, 20:22:36, 1076282 Цитата (BlackSnake @ 13.03.06, 15:59) Эй! это не моя реплика!!! |
Сообщ.
#77
,
|
|
|
Цитата микроха @ А ффы мне ково циттироффали? Псефдокодовцца и фаськовццца? Так он в сливах! Которые поспели в ццаду у дядди ФФФаани.. Это не ответ. Цитата BlackSnake @ Эй! это не моя реплика!!! В курсе. Прошу прощения, но я так и не нашел, откуда это было сцитировано. Потому сцитировал ваш и благополучно забыл переправить автора на trainer. |
Сообщ.
#78
,
|
|
|
Evil J - ой да фы слиффоффки апклюкались! Малаццца!
Добавлено ржалнемог! |