Двойное условие в while

Тема в разделе "WASM.ZEN", создана пользователем cresta, 24 окт 2005.

  1. _DEN_

    _DEN_ DEN

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



    Вопрос на засыпку: можно ли в си записать выражение (float)lpText+0.5 и если да, то чему оно будет равно ?



    На сколько я знаю, любые сишные типы можно приводить друг к другу с помошью приведения в стиле си



    Т.е.



    int a = (int)b;



    Для приведения в стиле C++ существуют



    int a = int(b);

    int a = static_cast<int>(b);

    Derived* a = dynamic_cast<Derived*>(b);

    Derived* a = reinterpret_cast<Derived*>(b);

    int& a = const_cast<int&>(b);
     
  2. infern0

    infern0 New Member

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


    это все из-за хренового дизайна твоей проги
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    IceStudent

    > "Практически: ..."

    Интересно, а вот дельфям по барабану чего к чему приводить - лишь бы размер совпадал
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    leo

    Хорошо. Про 4 соврал, не обратил внимания на отсутствие звездочки.
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    leo правильно понял, почему (int), а не (int*). Это всего лишь пояснение компилятору, что размер 4 байта. Но не интерпретация как указатель на дворд.



    q_q

    Ну так придирайся, потому и нарисовал код, чтобы кто-нибудь придрался: "тут неправильно, надо так или иначе". А вообще есть 2 текстовых файла (словари, 1,66 Мб и 1,33 Мб), строки в них уже упорядочены по алфавиту, каждая строка - новое слово (термин) и его перевод. Строки разделены последовательностью 0D0A.



    infern0

    Сможешь нарисовать код без приведения типов? Дерзай. Блесни хорошим дизайном и заставь VirtualAlloc вернуть char* без приведения типов.
     
  6. SI_16

    SI_16 New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    10
    cresta

    замени выражения вида
    Код (Text):
    1. *(lpText+j)


    на
    Код (Text):
    1. lpText[j]


    и
    Код (Text):
    1. *(lpText)


    на
    Код (Text):
    1. *lpText


    гораздо красивее будет
     
  7. infern0

    infern0 New Member

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


    это будет _одно_ приведение, а не

     
  8. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    более того - напиши new char[...] и обойдешься без приведения. Или new тоже асмовая религия не позволяет использовать ?
     
  9. _DEN_

    _DEN_ DEN

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



    и заставь VirtualAlloc вернуть char* без приведения типов.



    operator new для кого придуман?



    [EDIT]



    infern0, про new не заметил :)
     
  10. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    SI_16

    понял.



    infern0





    Именно. В самую точку. Асмовая религия гласит: есть byte, word, dword, qword, sixbyte, tenbyte. Остальное - от лукавого.







    Ну ведь в программе-то не одна переменная. Хоть тресни, не возьмёт SendMessage lpText, пока не приведёшь его к LPARAM. Что, объявить lpText как LPARAM? А как тогда быть с buffer? Делать

    buffer = *((char*)lpText) ? В одном месте убираем приведение - оно вылазит в другом.

    И так будет постоянно, покуда есть более одного типа размерностью 32 бита. А их немеренное количество...

    Можешь объявлять хоть с new, хоть с old, а как дойдет до SendMessage, никуда ты не денешься от приведения к LPARAM. И не зависит это от структуры проги
     
  11. IceStudent

    IceStudent Active Member

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


    Это что такое? С какого писания-то?
     
  12. infern0

    infern0 New Member

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


    тогда и пиши на асме, нафига тебе лукавый с ? А то блин мало того что с языком не разобрались так еще и кричат что мол это отстой.
     
  13. _DEN_

    _DEN_ DEN

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



    Да-да! Фтопку их, фтопку!!! :)) Руки проч от Ц++ ! :)))
     
  14. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    IceStudent

    Где 6 байтовые используются - не знаю, а 10 байт - родной тип для fpu.



    infern0



    Я как-нибудь сам решу, на чём писать. У меня настроение мазохистское, поэтому использую си.

    А ты так и не показал, как обойтись в указаной процедуре без приведения типов :) Просто нарисовался с умными мыслями и всё. А на деле пшик.
     
  15. IceStudent

    IceStudent Active Member

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

    Ну так то FWORD и TBYTE.
     
  16. infern0

    infern0 New Member

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


    указанная процедура написана ногами, поэтому в ней без приведения не обойтись. А писать программу за тебя не буду.

    Суть в том что если ты не хочешь или не умеешь писать правильно с точки зрения языка то это не значит что он плохой. Это значит несколько другое
     
  17. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Вот это и есть пшик.

    Программа давно написана и работает, никто не просит тебя её писать. А если не можешь подтвердить свои слова делом, то не надо ссылаться на выдуманные причины.

    Пожалуйста, не пости сюда больше, если тебе нечего сказать конструктивного.
     
  18. _DEN_

    _DEN_ DEN

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

    infern0



    Не ссортесь, горячие финские парни :)))
     
  19. Tim Sobolev

    Tim Sobolev New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2005
    Сообщения:
    53
    имхо, если еще актуально, надо вместо

    while ((*((char*) ((int)lpText+j))!=0xA) || (*((char*) ((int)lpText+j))!=0xD))

    писать while((lpText[j]!=0xA)&&(lpText[j]!=0xD))

    как уже говорил Artemy...

    ведь тебе надо выполнять цикл пока j-ый символ не равен 0xA и не равен 0xD

    Ведь если использовать "или" то будет невыполнятся или только первое условие, или только второе, что к завершению цикла однозначно не приведет...
     
  20. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Это я уже исправил, сейчас актуален другой вопрос: общий стиль процедуры.