Форум программистов, компьютерный форум CyberForum.ru

uint32_t this decimal constant is unsigned only in ISO C90 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 21:54     uint32_t this decimal constant is unsigned only in ISO C90 #1
Пишу так:
C++
1
uint32_t i=2147483648;
Компилятор выдает: this decimal constant is unsigned only in ISO C90
И работает как со знаковой переменной.
Как это поправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2011, 21:54     uint32_t this decimal constant is unsigned only in ISO C90
Посмотрите здесь:

Класс decimal C++
пишет :expected constant expression;cannot allocate an array of constant size 0 C++
C++ Разница int, short, unsigned int, unsigned short
Unary minus operator applied to unsigned type, result still unsigned C++
C++ Input a 7-digit integer containing only 0s and 1s and print its decimal equivalent
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
01.05.2011, 22:01     uint32_t this decimal constant is unsigned only in ISO C90 #2
А что мешает написать unsigned int?
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 22:06  [ТС]     uint32_t this decimal constant is unsigned only in ISO C90 #3
То, что размер unsigned int меняется на разных системах, а размер uint32_t должен быть всегда постоянен - беззнаковый 32 бита
Но что-то у меня не работает
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 22:14     uint32_t this decimal constant is unsigned only in ISO C90 #4
Union, Ну дык он ведь пишет, что эта константа является unsigned только в С90.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
01.05.2011, 22:15     uint32_t this decimal constant is unsigned only in ISO C90 #5
Здесь можно использовать unsigned long, его размер не меняется.
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 22:30  [ТС]     uint32_t this decimal constant is unsigned only in ISO C90 #6
ForEveR что-то не вижу логики. Переменная, которая по своему названию беззнаковая и в С90 была таковой, вдруг перестала быть беззнаковой? Не вижу смысла в этом.
Как мне объявить этот стандарт для неё?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 22:51     uint32_t this decimal constant is unsigned only in ISO C90 #7
Union, Так.
Цитата Сообщение от Union Посмотреть сообщение
а размер uint32_t должен быть всегда постоянен
А ссылочку на пруф можно? ЗЫ в каком он хедере-то хоть? Я у себя найти никак не могу.

Добавлено через 12 минут
Так о чем это я. В MSVS такого типа нету. Обязан он быть в любом компиле только со стандарта С99. Так что пока каждый С++ компиль не будет поддерживать С99 - это непереносимо, насколько я понимаю.
2010 поддерживает. Переносимо видать)
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
01.05.2011, 23:02     uint32_t this decimal constant is unsigned only in ISO C90 #8
uint32_t i=2147483648u;
??

что за компилятор?

Добавлено через 1 минуту
C
1
2
3
4
5
6
#include <stdint.h>
 
int main()
{
   uint32_t i=2147483648u;
}
Добавлено через 1 минуту
для не с99 в каком-нибудь #inсlude <linux/..> #include "os_spec.h" будут нужные typedef'ы
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 23:02     uint32_t this decimal constant is unsigned only in ISO C90 #9
А 10-ка и без u воспринимаеть.

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstdint>
 
int main()
{
    uint32_t param = 2147483648;
    std::cout << sizeof(param) << ' ' << param << '\n';
    param = -1;
    std::cout << param << '\n';
}
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 23:13  [ТС]     uint32_t this decimal constant is unsigned only in ISO C90 #10
У меня g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 QT 2.0.1
ForEveR, ваш пример выдает тоже самое
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
01.05.2011, 23:13     uint32_t this decimal constant is unsigned only in ISO C90 #11
ну дак u добавить
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 23:16  [ТС]     uint32_t this decimal constant is unsigned only in ISO C90 #12
Дак мнеж не ворнинг нужно подавить, а чтобы переменная стала беззнаковая
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
01.05.2011, 23:16     uint32_t this decimal constant is unsigned only in ISO C90 #13
звезда в шоке, а она чтоли стала знаковой?
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 23:18  [ТС]     uint32_t this decimal constant is unsigned only in ISO C90 #14
Блин, дак она и была знаковая, хотя не должна быть Вот я и спрашиваю, почему вообще так, ведь не должно быть, даже название расшифровывается uint32_t = unsigned integer 32 bit

C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <cstdint>
 
int main()
{
        uint32_t param = 2157483648u;
        printf("%i\n", param);
}
Выдает: -2137483648
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
01.05.2011, 23:21     uint32_t this decimal constant is unsigned only in ISO C90 #15
Bash
1
2
%d or %i    Signed decimal integer
%u             Unsigned decimal integer
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 23:22  [ТС]     uint32_t this decimal constant is unsigned only in ISO C90 #16
Дак это же вывод. А мне нужно нужно над переменной производить разные математические операции. Чтобы она физически была беззнаковой, как unsigned long
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.05.2011, 23:23     uint32_t this decimal constant is unsigned only in ISO C90 #17
Union, Блин. Она беззнаковая. Попробуй ей присвоить -1 и выведи через
C
1
printf("%u\n", var_name);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2011, 23:30     uint32_t this decimal constant is unsigned only in ISO C90
Еще ссылки по теме:

C++ Приведение типов unsigned char[2] to unsigned char [64]
C++ Не понятный undefined reference to `unsigned long long f<unsigned long long, void>
C++ C++ & Mysql не хочет работать с decimal

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 23:30  [ТС]     uint32_t this decimal constant is unsigned only in ISO C90 #18
Спасибо, действительно...придётся все printf переписывать
Yandex
Объявления
01.05.2011, 23:30     uint32_t this decimal constant is unsigned only in ISO C90
Ответ Создать тему
Опции темы

Текущее время: 03:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru