Насколько я понял, разработчики языка Си умышленно оставили "неопределённость" с целью дать возможность компилятору генерировать эффективный код для тех случаев, когда поведение хорошо определено. Кто-нибудь может привести мне конкретные примеры для случая оптимизации арифметических вычислений? Например, вот фрагмент кода.
int a,b;
a=1;
b=(a++) + (5*a++);
Если добавить в язык правило, которое гарантирует порядок вычислений операндов "слева направо", то неопределённость пропадает. Насколько это ухудшит возможности оптимизации?
При текущем стандарте мне нужно вводить дополнительную (временную) переменную для устранения неопределённости. Это не совсем удобно.
int a,b, temp;
a=1;
temp=a++;
b=temp + (5*a++);