170 похожих чатов

🌝Всем привет. Меня вот интересует вопрос. Вот есть код. #include <iostream> #include <climits> int

f(int a){
return a+1;
}
unsigned int g(unsigned int a){
return a+1;
}
int main() {
std::cout << (INT_MAX) << std::endl; // 2147483647
std::cout << f(INT_MAX) << std::endl; // -2147483648 // UB

std::cout << (UINT_MAX) << std::endl; // 4294967295
std::cout << g(UINT_MAX) << std::endl; // 0 // not UB
}
В ассемблерном коде f и g одинаковые, ну то есть в машинном коде они точно делают одно и тоже.
Но почему в f UB, а в g нет UB?
Ну что "так написано в стандарте" - я понимаю... Но почему они так написали? какая у них на это была причина?
Мол ведь можно представить что int это точно такая же зацикленная сущность (как и unsigned int), где после INT_MAX идёт INT_MIN - вполне себе определённое поведение (как и когда после UINT_MAX идёт 0)

4 ответов

7 просмотров

Потому что они хотят, например, иметь возможность хранить int в типе шире, чем int, когда он используется для индексации массива

Интересная логика у тебя... Ты текст стандарта поверяешь нестандартным машинным кодом? Именно потому это и UB, что стандарт не регламентирует генерируемый машинный код, и не регламентирует машинное представление знаковых целых в отрицательной части значений. UB это просто конец области действия стандарта. Тут мы гарантируем проведение и описываем его ,а дальше - не можем, дальше - UB

Ilya Zviagin
Интересная логика у тебя... Ты текст стандарта пов...

с 20 стандарта представление регламентировано (дополнение до двух), причем в черновике сишного стандарта тоже

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Подскажите, можно ведь комбинировать запись данных в один и тот же Stream через TFileStream и через TCompressionStream поочерёдно? Ну т.е. часть данных мне нужно сжать, часть ...
notme
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати на работу никто не хочет, слегка на Сшке подписывать? От 170к в месяц, под Москвой
Andrey Ermakov
6
А подскажите вопрос. Запускаю приложение под дебагом, всё красиво дебажится. Копирую его в другую папку, запускаю, в делфи делаю атач ту процесс, бряки при этом перестают рабо...
Serjone
2
Карта сайта