|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
MS VS 2017 (CE), проект С++. Код: plaintext 1. 2. 3.
При попытке вызвать f() c параметром, равным -214748364 8 Код: plaintext 1.
- компиляции обламывается с сообщением об ошибке: error C4146: применение унарного минуса к типу без знака; результат оставлен без знака Если значение параметра от -214748364 7 или больше - все ОК. Если вызываю Код: plaintext 1.
- то без проблем компилируется, "большое" значение приводится к знаковому int, в отладчике вижу ожидаемое значение - 214748364 8 . Сие обескураживает. Всегда был уверен, что значение знаковых 32-битных целых живет в диапазоне от -214748364 8 до 214748364 7 . Тынц в MSDN. Прокомментируйте, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 03:04 |
|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
Проверил с другими signed типами: signed char (-128..127) и short (-32768..32767) - все без проблем, только с int такая странность... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 03:28 |
|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
Можно без объявления функций, просто переменной типа signed int присваивая значения: Код: plaintext 1. 2. 3. 4. 5. 6.
Баг, что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 03:55 |
|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
Котовасия, если не полениться посмотреть в limits.h там есть Код: plaintext 1.
Есть в с++ концепция числового литерала При отсутствии суффиксов тип у литерала по умолчанию будет int, но если значение не помещается в int, то тип будет unsigned int. А 2147483648 в int не помещается. Ну а '-' это не часть числового литерала, это применение к значению операции унарного минуса. Что собственно и написано в сообщении об ошибке. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 07:22 |
|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
Barlone, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 07:43 |
|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
BarloneКотовасия, если не полениться посмотреть в limits.h там есть Код: plaintext 1.
Есть в с++ концепция числового литерала При отсутствии суффиксов тип у литерала по умолчанию будет int, но если значение не помещается в int, то тип будет unsigned int. А 2147483648 в int не помещается. Ну а '-' это не часть числового литерала, это применение к значению операции унарного минуса. Что собственно и написано в сообщении об ошибке. По ссылке указано, что тип будет long long (64 битный), а вовсе не unsigned int. Насчет unsigned int сказано в описании ошибки, противоречие то есть. Пишут, что если использовать (современный) gcc, подобной ошибки компиляции не будет. Поискал - в интернете давно по сему поводу ругачки: "в соответствии со стандартом" (см. 5.13.2) - long long (64), а в описании ошибки C4146 - unsigned int и рекомендация использовать INT_MIN. Похоже, что компилятор C++ пока не "тянет" все новую фичи. Спасибо еще раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2018, 20:53 |
|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
Вообще, очень странная проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 07:42 |
|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
Действительно, современным стандартам не соответствует. А вот в старом стандарте С не было типа long long ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 08:19 |
|
MSVS 2017: не могу в функцию с аргументом типа int передать значение -2147483648
|
|||
---|---|---|---|
#18+
Смотри-ка, исправили: https://developercommunity.visualstudio.com/content/problem/229901/c-compiler-an-error-occurring-while-initializing-t.html Правда, пока лишь в MSVS-2019. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 03:53 |
|
|
start [/forum/topic.php?fid=57&msg=39627738&tid=2017502]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 132ms |
0 / 0 |