а чем все-таки отличаются С и С++?

Тема в разделе "WASM.HEAP", создана пользователем dZentle_man, 23 окт 2010.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    dZentle_man

    Вы во власти иллюзии, порожденной схожим синтаксисом.

    Нет, не сохранилась.

    Это не имеет никакого отношения к свойствам языка как такового.

    Понимание придет с опытом. Возможно.


    KeSqueer

    Отстаньте от моего сайта, инфа на нем устарела несколько лет назад :) Он остро нуждается в выпиливании под корень, и переписывании с нуля :)))
     
  2. dZentle_man

    dZentle_man New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2008
    Сообщения:
    414
    Будет приведение double к float, а дальше я не помню - то ли cmp, то ли специальный оператор для сравнения вещественных, то ли что-то третье... но да, ориентируюсь на cmp, потому что остальное - всего лишь более сложные представления более элементарной операции cmp. А вот если не знать такой подоплеке, то возникает ощущение непонимания - а каким образом сравнивает компьютер два числа? Неужели он может мыслить по-человечески? Ан нет, не может, и понимание как он мыслит приходит через понимание архитектуры процессора и базовых команд. Ну по-крайней мере для меня это так, никого в свою веру не обращаю.

    Это детали реализации компилера. Мое представление носит умозрительный характер, призванный объяснить абстрактные понятия тем, что мне уже понятно и принято на веру. Понятное дело, что пока не заглянешь дизассемблером, то нельзя быть уверенным в том, во что переведен код на самом деле. В этом и есть высокий уровень профессионализма - знать во что на самом деле переводит компилер.

    Ну я этого не знал. Много есть фич и хинтов, которые использовались при проектировании, и конечно их желательно знать. Идея конечно красивая.

    То есть я лох полнейший и вообще не шарю? Ну ок, по большому счету вы правы. Надеюсь вы довольны.

    Да я не про int a,b; ... a = b/365, а про то как записать dword переменную в машинных кодах, причем так чтобы видно было что это переменная. То есть я представляю что должна быть выделена область памяти для размещения переменных, но какие именно указатели будут с ней работать и как - пока не знаю, есть масса всего другого, что не менее интересно и больше занимает меня сейчас.
     
  3. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Язык макросов в масм и фасм тоже очень силен
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Вот жеж бред.
     
  5. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Уу.. как все запущено))) Так это и обезьяну можно научить сопоставлять одни строчки другим. Вы глубоко заблуждаетесь если думаете что программирование это знание асма.
     
  6. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    dZentle_man
    >> более того, cmp это по сути sub, толко она не трогает приемника.
    > Ну я этого не знал.
    первый класс церковно приходской школы. как вообще сравнивать два числа без компьютера?!

    > Много есть фич и хинтов, которые использовались при проектировании,
    > и конечно их желательно знать. Идея конечно красивая.
    это не проектирование. это основы математики.

    > А вот если не знать такой подоплеке, то возникает ощущение непонимания
    > а каким образом сравнивает компьютер два числа?
    так вы и так не знаете. '<' и 'cmp' это синтаксический сахар. а сравнение вещественных это вообще отдельная тема, а частности, а может быть равно b, даже если a < b. для вещественных это нормально.


    > Это детали реализации компилера. Мое представление носит умозрительный характер,
    > призванный объяснить абстрактные понятия тем, что мне уже понятно и принято на веру.
    офигительно абстрактный характер. ладно, скажите вот тут у вас тоже cmp будет? if (a==b) return false; else return true; ??? или все-таки sub a, b будет достаточно? ;) без cmp и ветвлений. оптимизирует ли компилятор или нет -- хз. но если вы знаете что такое сравнение, то вы напишите (a-b). и ложить на компилятор. и ложить на ассмеблер. вот это _базовые_ концепции. а cmp уже очень большие частности.

    > как записать dword переменную в машинных кодах, причем так чтобы видно было что это переменная
    eax? это двойное слово и это уж точно не постоянная ;)

    JCronuz
    > Язык макросов в масм и фасм тоже очень силен
    правильно. язык макросов. он может быть прикручен к ассеблеру, но самого ассмемблера в нем нет. макросы "Разворачиваются" в текст, который затем транслируется или не транслируется в машинные коды. во что транслируется макрос M в общем случае мы не можем.
     
  7. reversecode

    reversecode Guest

    Публикаций:
    0
    я так понимаю крис в омерике русский забывает
    и что бы это компенсировать, старается побольше болтать на форуме.
     
  8. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    kaspersky
    GCJ?
     
  9. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Разницы нет.
    С++ является расширением для С. И в свою очередь предписывает некоторые парадигмы программирования, которые для некоторых задач, не подходит принципиально(например дизасм ) ...

    А вот
    Будет более изящней и разумнее сделать template функцию ...

    С++ не самостоятельный язык, так что программировать без Си нельзя ...
     
  10. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    IceCrashLdr
    а еще лучше обернуть в класс, перегрузить и отнаследовать ее. вопрос - зачем?
     
  11. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Есть функа не используется компилер ей не сгенерирует, если узаеться и сравнения будут минимальными получим инлайн, если сравнения будут велики получим не инлайн ... :)
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Сарказм не уместен, тут и правда шаблонная функция лучше макроса (хотя бы потому, что не перевычисляются выражения a и b)
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Да здрасте. C++ и Си вообще разные языки, вы тут яблоки с помидорами сравниваете.
     
  14. qqwe

    qqwe New Member

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

    #define MAX(a,b) ((a)<(b))?(b):dntknw:a)

    в случае целых расширяется в 3 команды, в случае дробного - на пару команд больше. какие классы? какие функции? для чего вам тут шаблоны?

    Great
    в смысле, если будут писать

    с = МАХ(а+12, b+13);

    ?
    не совсем уверен, что чтото будет перевычисляться, но стоит проверить.
     
  15. dZentle_man

    dZentle_man New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2008
    Сообщения:
    414
    Не знаю чему вас учили в церковно-приходской школе, но меня в первом классе учили в городской средней школе считать, как бы это ни странно звучало, на палочках. Даже покупали специальные палочки для этого и приносили в школу. Процесс строился на наглядном сравнении количества палочек - две - больше, чем одна, а три - больше, чем две, на это и строилось понятие о цифрах. Само же сравнение изучалось уже классе во втором, если не третьем, и насчет этого у меня совсем туманные воспоминания, но примеры палочек и пучков палочек приводились вплоть до пятого класса включительно. Так и сравнивали, умозрительно прикидывая какая куча палочек будет больше - 57 или 64 и тут на помощь приходило понимание цифр - 6 - это больше, чем 5, а поскольку речь о числе десятков, то явно куча с 6 десятками палочек больше кучи с 5 десятками. Само же понятие отрицательных чисел вводилось не раньше 5 класса, а то и шестого, как и понятие переменной, не имеющей количественного представления. Наверное умники, составляющие программу обучения, берегли неокрепший детский мозк среднего дебила от информации, которую ему сложно осилить. А как можно сравнивать числа вычитанием одного из другого и сравнением результата с нулем, не имея понятия об отрицательных числах? Да, для высшего образования может быть и характерно переосмысление математического смысла от пучков палочек к финтам с вычитанием, но даже не для каждого вуза - в моем этого не было, хорошо хоть наконец доказали почему производная от "икс в квадрате" равна "два икс" через пределы, которые тоже почему то только в вузе и преподавались.

    Да да, основы, которые даже в моем вузе не преподавали, а ведь я учился не в какой-то провинциальной шараге, а в москве, в университете со столетней историей.

    Открытия за открытиями... Два числа не равны, но равны... Может быть вы невзначай открыли как превысить скорость света? Или сделать вечный двигатель?


    Интересно, а бравые китайцы с вашей бравой тимы все как один знают про cmp и все эти ваши базовые концепции? Или они просто умеют кой-че подреверсить и взяты на работу уже за это?

    Афигеть! То есть берем прогу с 10 тысячами строк, и представляем себе что все переменные записаны в базовых регистрах. Красота! Нет, вы точно открыли какую то сверхфизику, позволяющую в том числе и телепортироваться. Потому что я не знаю иначе, как поместить, скажем, 10 переменных в четыре базовых регистра. А потом еще и вызвать какую-нибудь функцию, требующую чтобы параметры передавались в том числе через какой-нибудь базовый регистр.

    Че правильно? Макрос - это обобщение, которое можно разобобщить в конце концов добравшись до ассемблерного представления.
     
  16. dZentle_man

    dZentle_man New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2008
    Сообщения:
    414
    Да каждый может брякнуть любую хрень не подумав. А вот доказать желающих всегда меньше. Хотя я согласен, что С и С++ - не одно и то же, но все таки считаю что косую черту между ними ставить можно, потому что можно написать такой код, который откомпиллируется и плюсовым, и сишным компилером. А уж что выбирать - уходить в широту плюсовых языковых средств, или сишных триксов - это уже зависит от проекта и желания разработчика, но очень близкие языки. Даже хоть С++ и огромный динозавр в сравнении с С, в тех же плюсах можно писать в С-стиле сколько душеньке угодно, правда без использования особо задро сишных трюков. Не всегда ведь эти триксы и нужны, ну а если нужны, то и пиши себе на С. А вот прямо возбухать если человек слеш поставил - явно перебор.
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    dZentle_man
    Полностью соглашусь.
     
  18. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Great
    Не все задачи на С++ без можно хорошо решить ... Дизасм двиг без сятины с студию ...

    qqwe
    Как минимум ...

    Код (Text):
    1. 003E1054 8D 44 24 20      lea         eax,[esp+20h]
    2. 003E1058 50               push        eax  
    3. 003E1059 8D 4C 24 08      lea         ecx,[esp+8]
    4. 003E105D 51               push        ecx  
    5. 003E105E C6 44 24 6C 01   mov         byte ptr [esp+6Ch],1
    6. 003E1063 FF 15 44 20 3E 00 call        dword ptr [__imp_std::operator<<char,std::char_traits<char>,std::allocator<char> > (3E2044h)]
    7. 003E1069 83 C4 08         add         esp,8
    8. 003E106C 84 C0            test        al,al
    9. 003E106E 8D 44 24 20      lea         eax,[esp+20h]
    10. 003E1072 75 04            jne         main+78h (3E1078h)
    11. 003E1074 8D 44 24 04      lea         eax,[esp+4]
    12. 003E1078 50               push        eax  
    13. 003E1079 8D 4C 24 40      lea         ecx,[esp+40h]
    14. 003E107D FF 15 38 20 3E 00 call        dword ptr [__imp_std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> > (3E2038h)]
    Будет считать количество команд? ( Релиз мод с двумя обычными стрингами и разумеется без инлайн "=" )


    Название темы читали? странно что вас сюды потянуло ...
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    qqwe
    нет, в смысле если будут писать

    var = MAX(f1(), f2());

    а у функций f1 и f2 есть сайд-эффекты при вызове (вызов каждой ф-ии будет произведен дваджы в макросе-то. тут даже оптимизатор не будет иметь права соптимизировать в temp1=f1(), temp2=f2(), result=MAX(temp1,temp2), как раз из-за сайд-эффектов, которые могут быть полезные, а могут быть и вредные).

    а вот аргументы шаблонной функции будут точно вычислены только один раз.

    UPD:

    да хотя бы инкремент если юзать:

    с = MAX(++a, --b); - все равно будет вычислено неправильно.
     
  20. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    dZentle_man
    +9(99)