Size: a a a

2020 July 27

VK

Vartan Khachaturov in SPbLUG chat
Serguei Khvatov
Один и тот же объект извлекается два раза, в одном случае с побочным эффектом (инкремент)
в классическом UB (как минимум в C) проблема возникает тогда, когда ты более чем один раз пытаешься *модифицировать* объект.
источник

IE

Ivan EKbfh in SPbLUG chat
Svetlana Chizhova
У тебя есть?
Не, я увдивлен зачем тебе
источник

И

Иван in SPbLUG chat
Serguei Khvatov
Один и тот же объект извлекается два раза, в одном случае с побочным эффектом (инкремент)
и что в это такого??? это не трюкачество. просто несколько вырожденный пример кода.
источник

SC

Svetlana Chizhova in SPbLUG chat
Ivan EKbfh
Не, я увдивлен зачем тебе
Потому что в универе остались Кокушкин с Хлоповым.
источник

IE

Ivan EKbfh in SPbLUG chat
Беги
источник

SC

Svetlana Chizhova in SPbLUG chat
Ivan EKbfh
Беги
В смысле? Я уже ушла
источник

IE

Ivan EKbfh in SPbLUG chat
Svetlana Chizhova
В смысле? Я уже ушла
А, класс
источник

VK

Vartan Khachaturov in SPbLUG chat
Serguei Khvatov
Один и тот же объект извлекается два раза, в одном случае с побочным эффектом (инкремент)
Но да, ты прав, это всё-таки UB. Извлекать объект можно только для непосредственного применения в вычислениях.
источник

VK

Vartan Khachaturov in SPbLUG chat
Это не такой же случай, как i++ + ++i
источник

p

pragus in SPbLUG chat
@gnulauqa btw, как тебе rust?
источник

VK

Vartan Khachaturov in SPbLUG chat
pragus
@gnulauqa btw, как тебе rust?
Я слишком тупой всё-таки. Там все очень сложно и все время меняется. И компилятор, гад, все время напоминает мне, что я тупой.
источник

VK

Vartan Khachaturov in SPbLUG chat
Я поделал задачки на экзерцизме, и убедился, что мне на С даже с плюсиками комфортнее.
источник

p

pragus in SPbLUG chat
Vartan Khachaturov
Я слишком тупой всё-таки. Там все очень сложно и все время меняется. И компилятор, гад, все время напоминает мне, что я тупой.
мм... тогда надо попробовать еще несколько подходов к снаряду )
источник

∀lǝxǝʎ in SPbLUG chat
Vartan Khachaturov
Но да, ты прав, это всё-таки UB. Извлекать объект можно только для непосредственного применения в вычислениях.
Он для этого и извлекается же. А целочисленное переполнение так просто рядом оказалось.
источник

SK

Serguei Khvatov in SPbLUG chat
Vartan Khachaturov
Но да, ты прав, это всё-таки UB. Извлекать объект можно только для непосредственного применения в вычислениях.
А если он встречается несколько раз? Оптимизировать, как это делает C? Тут ещё один ряд граблей расстилается.
Я, помню, в молодости сильно попался:
while (x[i++] == x[i++])
источник

IE

Ivan EKbfh in SPbLUG chat
Serguei Khvatov
А если он встречается несколько раз? Оптимизировать, как это делает C? Тут ещё один ряд граблей расстилается.
Я, помню, в молодости сильно попался:
while (x[i++] == x[i++])
Что могло пойти не так, называется
источник

∀lǝxǝʎ in SPbLUG chat
Serguei Khvatov
А если он встречается несколько раз? Оптимизировать, как это делает C? Тут ещё один ряд граблей расстилается.
Я, помню, в молодости сильно попался:
while (x[i++] == x[i++])
А на что ты рассчитывал в таком цикле?
источник

VK

Vartan Khachaturov in SPbLUG chat
Serguei Khvatov
А если он встречается несколько раз? Оптимизировать, как это делает C? Тут ещё один ряд граблей расстилается.
Я, помню, в молодости сильно попался:
while (x[i++] == x[i++])
wart@blacky:~$ cat ./try.c 
#include <stdlib.h>
#include <stdio.h>

int main(void) {
   int i, j;
   i = 1;

   j = i + i++;
   printf("%d\n", j);
   i = 1;
   j = i + i + i++;
   printf("%d\n", j);
   return 0;
}
wart@blacky:~$ gcc -O0 ./try.c
wart@blacky:~$ ./a.out
3
3
wart@blacky:~$ clang-9 -O0 ./try.c
./try.c:8:14: warning: unsequenced modification and access to 'i' [-Wunsequenced]
   j = i + i++;
       ~    ^
./try.c:11:18: warning: unsequenced modification and access to 'i' [-Wunsequenced]
   j = i + i + i++;
       ~        ^
2 warnings generated.
wart@blacky:~$ ./a.out
2
3
источник

VK

Vartan Khachaturov in SPbLUG chat
и прям кстати видно на godbolt'е, как компилятору сносит крышу :)
источник

SK

Serguei Khvatov in SPbLUG chat
∀lǝxǝʎ
А на что ты рассчитывал в таком цикле?
На то, что будут сравниваться разные элементы
источник