Извращения в C++

Тема в разделе "WASM.ZEN", создана пользователем _DEN_, 23 авг 2005.

  1. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Quantum



    По-моему _DEN_ прав. Если значение первого операнда определяет результат лог. оператора, то код вычисления второго операнда выполнен не будет. Микрософт это декларирует явно.

    При этом, если первый операнд может быть вычислен на этапе компиляции (оптимизация), то при сотв. его значении код вычисления второго операнда вообще не будет сгенерирован.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Вот код, который запостил г-н Loger:
    Код (Text):
    1. bool f(){return false;};
    2.  
    3. void main(){
    4. if (f() && somefunc()){};
    5. }




    green



    Естественно, но спор не об этом. Смотрите внимательнее пример!
     
  3. _DEN_

    _DEN_ DEN

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







    Типа соль с перцем в том что somefunc() нигде не описана?
     
  4. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Quantum

    Сорри, если я чего-то не понял - я подумал, что Вы не согласны с утверждением _DEN_:





    Решение о вычислении somefunc принимается в run-time, в этот момент результат вычисления f() известен, независимо инлайнил её компилер или нет.



    Эта стандартная оптимизация вычисления лог. операторов выполняется независимо от режима компиляции (т.е. настроек оптимизации конкретного компилятора).
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    green



    В рантайме somefunc не выполнит даже турбо-паскаль, если в опциях компиляции включить short-circuit, а любой стандартный с-компилятор использует эту опцию по умолчанию. Дело не в этом! Спор о том, должен ли стандартный (не оптимизирующий) с-компилятор опустить вызов somefunc вообще, т.е. чтоб и в коде этого вызова не было даже. Вопрос решается на этапе компиляции, а не в рантайме.



    _DEN_

    Соль в том, что f - это функция, а не условие из примитивных типов данных.
     
  6. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    стандарт говорит только о том должен ли быть ВЫЗОВ или нет. А что и в каком количестве включит в код компилятор - это его личная забота.
     
  7. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Quantum

    понял :)

    AFAIK, стандарт регламентирует только логику работы результирующего кода.

    В MS VC инлайн разрешён только в режиме оптимизации, и при компиляции с /Od код somefunc будет присутствовать.
     
  8. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    интереcно, что при компиляции кода

    if (false && somefunc())

    в режиме /Od компилятор все-таки опускает вызов somefunc, но выполняет проверку:

    xor eax, eax

    je ...



    явная непоследовательность...

    :)



    И что вообще такое абсолютно неоптимизированный код...
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    green

    Вот-вот!



    infern0



    Значит вызов можно поместить в код, но предварительно позаботиться о том, чтобы он никогда не выполнился :) Согласен.
     
  10. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    нет. достаточно скомпилировать нечто вроде:



    f:

    xor eax,eax

    ret



    ...

    call f

    or eax,eax

    jz go_after_if

    call somefunc

    or eax,eax

    jnz go_after_if

    if_here:

    ...

    go_after_if

    ...





    и это будет полностью соответствовать стандарту.
     
  11. anarchisticmass

    anarchisticmass New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    10
    Адрес:
    Ukraine
    Шаблона классов - это конечно же круто, ну а как на счет указателей на шаблоны тех самых классов :).
     
  12. _DEN_

    _DEN_ DEN

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



    Ну и что тут особенного?



    A<int>* pA; ?
     
  13. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    люди, а вы не могли бы мне показать, как можно пробежаться по памяти, полученной через указатель, возвращенный ф-цией GlobalAlloc, в который (в блок) был считан файл через ф-цию ReadFile, и проверить этот кусок памяти на наличие опред. послед-ти символов. допустим, 'y' и 'z'.

    само главно, нужно это сделать на Си++ , т.к. на асме я и сам могу=) а вот на си++ что-то запарился. не могу обратиться к содержимому этого полученного блока.

    пасиба.
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    varnie

    Оффтоп, создавай другую тему.
     
  15. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    IceStudent

    Мне понравился этот топ,да и на форуме и сайте много чего нового появилось и хотелось бы иметь в оффлайновом виде, обязательно ли ждать нового года чтобы появились новый версии таких замечательных вещей?



    all

    Прошу прощения за не втему
     
  16. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Я вот тут пытаюсь понять как комрад Александреску предлагает функторы реальзовывать... Вот это действительно изврат, у меня башка уже пухнет.
     
  17. anarchisticmass

    anarchisticmass New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    10
    Адрес:
    Ukraine
    Шо за Александреску? И какие функции? По подробнее плиз!
     
  18. _DEN_

    _DEN_ DEN

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



    Александреску - рИальный паЦЦан :) И не функции а обобщенные функторы.



    см. boost::function