Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. hamper

    hamper Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2005
    Сообщения:
    37
    Адрес:
    Russia
    Как в C++ работать с 80-битными вещественными числами?

    В MSDN пишут, что в 16-битных версиях Microsoft C/C++/Visual C++ поддерживались 80-битные числа (long double), а в Win32 long double то же самое что double.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    никак. только с помошью inline assembler.
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    hamper
    В общем, ты не зря зашёл на этот форум. Но если уж очень хочется, вот.
     
  4. booratino

    booratino New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    11
    перенесено в OS.Kernel
     
  5. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    booratino,
    imho ты не туда запостил.
     
  6. booratino

    booratino New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    11
    2 varnie
    но ведь я новичок в С/C++! :)
     
  7. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    booratino,
    у тебя просто шыбко тема сурьезная, посему я и посоветовал тебе отдельный топик создать. и тебе проще будет ориентироваться, т.к. все ответы у тебя в одной ветке будут, да и народу проще в текущем топике будет)

    IMHO.
     
  8. Ailinor

    Ailinor New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    7
    Как можно определить в диструкторе, что идёт раскрутка стека при ексепшене?
     
  9. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    А как деструктор связан с раскруткой стэка и при Exception ??????
     
  10. IceStudent

    IceStudent Active Member

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

    wsd
    Просто при раскрутке стека вызываются все деструкторы живших во время возникновения исключения объектов.
     
  11. Ailinor

    Ailinor New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    7
    Есть автообъект, который в конструкторе пишет в лог сообщение о входе в функцию, а в деструкторе - пишет о выходе. И хотелось бы определять в деструкторе, что летит ексепшин и писать соответствующую мессагу.
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ailinor
    Ох.. Ну, пиши в обработчике исключения, что возникло исключение. Или ставь глобальный флаг, а в деструкторе определяй. В SEH есть AbnormalTermination, но звать его можно только из __finally, так что это тебе ничем не поможет. Это если документировано.

    Так что, изменяй логику, имхо.
     
  13. Ailinor

    Ailinor New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    7
    Спасибо, но обрботчик в главной функции и лепить их в каждой функции не хочется. Решил просто вызывать в самом конце функции метод объекта, устанавливающий флаг (не глобальный, а член класса) нормального выполнения ф-ции и в деструкторе его проверяю. Но не нравиться :) Хотелось бы автоматизации :)
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    IceStudent
    это то я знаю.
    но помойму документированных возможностей в нём для этого и нет...
    он просто вызывается для уничтожения и всё:)
    И Ваш предложенный вариант по мойму самый рациональный!
    А ТС просто мыслит слишком глобально...
    мож конечно хукать раскрутку :)) и из деструктора узнавать... но незнаю официально
    не известно что раньше диструктор или раскрутка:dntknw:
    мож ТС хакнет это дело и отпишется и будем знать:)
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Имхо, там логику менять надо, а не хакать раскрутку) Разве только если что-то специфичное..
     
  16. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    есть unsigned char *p с адресом валидного unsigned char. как этот unsigned char теперь перевести в int значение? ф-ция atoi просит указатель на char. а как же с unsigned char быть?
    можно конечно сделать так:
    Код (Text):
    1. const char c = *p;
    2. const int value = atoi(&c);
    но может есть поправильнее решение? желательно C++ решение.
    спасибо!
     
  17. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Код (Text):
    1. const char c = *p;
    2. const int value = (int)c;
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    wsd
    Корректнее так: unsigned value = (unsigned)*p. У него же uchar.
     
  19. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    хм, попробовал ваши варианты. если указатель p указывает допустим на '0', то value в итоге получается 48. мне же надо получить ноль, т.е. сделать '0' -> 0. именно для этого и применяется ф-ция atoi, или я не прав? в чем фишка в общем?:)

    ps: unsigned int i = (unsigned int) *p; printf("value = %i\n", i);
    выводит код символа нуль, т.е. 48. а мне надо чтоб вывел именно нуль.
    вы видимо это и имели ввиду.
     
  20. Ailinor

    Ailinor New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    7
    Если у тебя указатель указывает на строку в которой записано чисто в символьном виде, то надо исп. atoi, если у тебя указатель на число, то использовать unsigned int i = (unsigned int) *((char*) p);