(Почему )использует неопределенное поведение неинициализированной переменной?

Если у меня есть:

unsigned int x;
x -= x;

ясно, чтоxдолжно быть равно нулю после этого выражения, но куда бы я ни посмотрел, они говорят, что поведение этого кода не определено, а не просто значениеx(до вычитания ).

Два вопроса:

  • Действительно ли поведение этого кода не определено?
    (Например. Может ли код дать сбой [или хуже] в совместимой системе?)

  • Если так,почемуговорит ли C, что поведение не определено, когда совершенно ясно, что xздесь должно быть равно нулю?

    т. е. какое преимущество дает отсутствие определения поведения здесь?

Четко,компилятор может просто использовать любое мусорное значение, которое он сочтет "удобным" внутри переменной, и оно будет работать, как задумано... что не так с этим подходом?

77
задан Sourav Ghosh 19 December 2017 в 10:25
поделиться