Russian Qt Forum
Сентябрь 22, 2024, 14:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по методу sprintf класса QString!  (Прочитано 4578 раз)
noi
Гость
« : Сентябрь 26, 2009, 14:37 »

Есть такой код:

Код:
QString str;
unsigned short varU = 0xffff;
short var = 0xffff;
str.sprintf( "%d", varU ); // str = "65535"
str.sprintf( "%d", var ); // str = "-1"

Как sprintf понимает, что в одном случае надо создать строку "65535", а в другом "-1"??

Смотрел исходники sprintf:

Код:
...
QString subst;
        switch (*c) {
            case 'd':
            case 'i': {
                qint64 i;
                switch (length_mod) {
                    case lm_none: i = va_arg(ap, int); break;
                    case lm_hh: i = va_arg(ap, int); break;
                    case lm_h: i = va_arg(ap, int); break;
                    case lm_l: i = va_arg(ap, long int); break;
                    case lm_ll: i = va_arg(ap, qint64); break;
                    case lm_j: i = va_arg(ap, long int); break;
                    case lm_z: i = va_arg(ap, size_t); break;
                    case lm_t: i = va_arg(ap, int); break;
                    default: i = 0; break;
                }
                subst = locale.d()->longLongToString(i, precision, 10, width, flags);
...

но для себя ответ так и не нашел)

Люди!! Помогите разобраться!
Записан
KADABRA
Гость
« Ответ #1 : Сентябрь 26, 2009, 15:41 »

В обоих случаях значение приводится к типу int.
В varU значение 65535, в var - -1.
В чём заключается проблема?
Записан
noi
Гость
« Ответ #2 : Сентябрь 26, 2009, 16:20 »

Вроде разобрался. Значения переменных var и varU приводятся к int во время передачи в функцию, т.е. в стеке лежат уже преобразованные значения.
Записан
zenden
Гость
« Ответ #3 : Сентябрь 26, 2009, 20:21 »

А как избавиться от этого приведения типов? В замешательстве
Где можно прочитать про такое поведение при вызове функции?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Сентябрь 27, 2009, 13:08 »

Вроде разобрался. Значения переменных var и varU приводятся к int во время передачи в функцию, т.е. в стеке лежат уже преобразованные значения.
Да, "приводится к старшему". Так же и float приводится к double при передаче на стек, поэтому "%g" работает для обоих.
Могу ошибаться но помнится мне это стандарт языка для функций принимающих переменное число параметров (т.е. это не специфика printf)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.058 секунд. Запросов: 23.