Evgueni-Petrov-aka-espetrov / 17202

1 stars 6 forks source link

twice undefined behavoir #12

Open Evgueni-Petrov-aka-espetrov opened 7 years ago

Evgueni-Petrov-aka-espetrov commented 7 years ago

https://github.com/Evgueni-Petrov-aka-espetrov/17202/blob/3814ea200c7787858b40525f33543f0e24421efe/Pestereva/lab_1_0.cpp#L10

Стандарт не говорит, есть ли знак у типа char. Поэтому stops[templ[i++]] работает неправильно для символов с кодами 128 ... 255.

Стандарт не говорит, что побочный эффект от i++ проявится после присваивания. Поэтому stops[templ[i++]] = i + 1 может работать как "stops[templ[i]] = i + 1; i = i + 1" или как "stops[templ[i]] = i + 2; i = i + 1" в зависимости от компилятора и опций компиляции.

Хотя тесты это не ловят, исправить надо )))

Зато всё виснет, если сделать char беззнаковым с помощью ключа /J вот так. cl.exe /J lab_1_0.cpp