Size: a a a

IT KPI C/C++ ХВ (не UB)

2020 August 23

YS

Y S in IT KPI C/C++ ХВ (не UB)
Y S
Ага, уже заметил: http://compcert.inria.fr/download.html
источник

YS

Y S in IT KPI C/C++ ХВ (не UB)
источник

A

András in IT KPI C/C++ ХВ (не UB)
Art Teatr
Увы
Скорее есть компилятор с++ для которого это не уб)
Но я таких не знаю
Так у 20 стандарті це вже не уб
источник

AT

Art Teatr in IT KPI C/C++ ХВ (не UB)
András
Так у 20 стандарті це вже не уб
Вроде ещё да
тут ещё ж прикол в том, что операция логическое И
и правая часть может как выполниться, так и нет
источник

A

András in IT KPI C/C++ ХВ (не UB)
Ну це да
источник

AT

Art Teatr in IT KPI C/C++ ХВ (не UB)
А вот определили ли они порядок модификации одного объекта несколько раз в одном выражении - не помню
источник

V

Vsevolod in IT KPI C/C++ ХВ (не UB)
В некоторых языках инкрементирование не добавляли, и правильно сделали
источник

AT

Art Teatr in IT KPI C/C++ ХВ (не UB)
Вроде они начали гарантировать результат слева от равно
и справа от равно
И модификация объекта справа не создаст уб для этого же объекта слева
тип:
id = 2 + id++;

А вот для такого, ещё уб:
data[id] = tmp[id++];
Ну и вопросы:
Если это последняя итерация цикла и размер массивов одинаков - вылезем ли мы за границы массива?
источник

AT

Art Teatr in IT KPI C/C++ ХВ (не UB)
Vsevolod
В некоторых языках инкрементирование не добавляли, и правильно сделали
А оно стреляет не только с инкрементами)
У тебя есть метод который модифицирует поле класса и что то возвращает
И отдельно методы для получения этого значения и для установки его

int setAndGet(int)

void set(int)
int get()

set(get() * setAndGet(get()+1));
источник

AT

Art Teatr in IT KPI C/C++ ХВ (не UB)
поздравляю
источник

AT

Art Teatr in IT KPI C/C++ ХВ (не UB)
Абсолютно тот же кейз
источник

AT

Art Teatr in IT KPI C/C++ ХВ (не UB)
Ибо не специфицировано что будет выполнено сначала
setAndGet(get()+1)

или же get() - который слева от умножения
Как следствие в регистрах окажутся разные значения
ну и ловим прекрасное уб
источник

AT

Art Teatr in IT KPI C/C++ ХВ (не UB)
Во всяком случае я не знаю специфицировали ли это
Помню что:
компилятор вправе располагать вычисления операндов коммутативных операции в любом порядке, исходя из предположения что вычисление данных операндов не имеют побочных эффектов для данной операции.

Как то так
но ползти за подробностями надо в стандарт)
источник

u

udsijxvkekwk in IT KPI C/C++ ХВ (не UB)
когда в Visual Studio у меня один файл - всё хорошо работает, а когда добавляю второй файл происходят ошибки сборки. с чем это связано?
источник

YS

Y S in IT KPI C/C++ ХВ (не UB)
А как файл добавлял?
источник

u

udsijxvkekwk in IT KPI C/C++ ХВ (не UB)
Y S
А как файл добавлял?
проект -> добавить новый элемент
источник

YS

Y S in IT KPI C/C++ ХВ (не UB)
источник

YS

Y S in IT KPI C/C++ ХВ (не UB)
udsijxvkekwk
когда в Visual Studio у меня один файл - всё хорошо работает, а когда добавляю второй файл происходят ошибки сборки. с чем это связано?
А вообще показал бы, что за ошибки
источник

YS

Y S in IT KPI C/C++ ХВ (не UB)
Может даже это
источник

u

udsijxvkekwk in IT KPI C/C++ ХВ (не UB)
Y S
А вообще показал бы, что за ошибки
а потом не удаётся найти указанный файл
источник