Вы не должны рассчитывать на это, конечно. Оптимизатор может сделать с вами что-то непростое, и ему следует разрешить это.
Это однако очень распространено. Я помню, в далеком 87 году одноклассник использовал компилятор DEC C и обнаружил странную ошибку, из-за которой все его буквальные 3 превратились в 11 (числа могли измениться, чтобы защитить невинных). Он даже сделал printf ("%d\n", 3)
и напечатал 11.
Он позвал меня, потому что это было так странно (почему это заставляет людей думать обо мне?), И примерно через 30 минут царапин на голове мы нашли причину. Это была строка примерно так:
if (3 = x) break;
Обратите внимание на один символ "=". Да, это была опечатка. У компилятора была маленькая ошибка, и он допустил это. В результате все его буквальные 3 во всей программе превратились в то, что было в х в то время.
В любом случае ясно, что компилятор C помещал все литералы 3 в одно и то же место. Если компилятор C в 80-х годах был способен сделать это, это не может быть слишком сложно сделать. Я ожидаю, что это будет очень распространенным явлением.