LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

x++ + ++other_x;

Здесь нет UB.

А вот быдлокодеры пишущие x++ + ++x;

...могут получить вместо ожидаемого 2*x+1 ... 2*x+2, например, всегда 0, если это будет удобно компилятору.

Например,

struct timeval tv;
unsigned long junk;
 
gettimeofday(&tv, NULL);
srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
clang превращает в
struct timeval tv;
unsigned long junk;
 
gettimeofday(&tv, NULL);
getpid();
srandom(0);

Так как результат вычисления с неинициализированной переменной — UB.

Исходная версия monk, :

x++ + ++other_x;

Здесь нет UB.

А вот быдлокодеры пишущие x++ + ++x;

...могут получить вместо ожидаемого 2*x+1 ... 2*x+2, например, всегда 0, если это будет удобно компилятору.

Например,

struct timeval tv;
unsigned long junk;
 
gettimeofday(&tv, NULL);
srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
clang превращает в
struct timeval tv;
unsigned long junk;
 
gettimeofday(&tv, NULL);
srandom(0);

Так как результат вычисления с неинициализированной переменной — UB.