Если функция не возвращает значения с допустимым типом возвращаемого значения, может ли компилятор выбрасывать мусор?

Если функция имеет тип возвращаемого значения, отличный от void, и функция ничего не возвращает, то я предполагаю, что компилятор возвращает значение мусора (возможно, рассматривается как неинициализированное значение ). Это происходит во время компиляции, так почему бы не выдать ошибку?

Например,

int func1() {
    return; // error
}

int func2() {
    // does not return anything
}

Второй func2должен выдавать ошибку, но это не так. Есть ли для этого причина? Мое мышление было таким, что его можно рассматривать как неинициализированное значение, поэтому, если нам нужно выдать ошибку во втором случае, нам нужно выдать ошибку, если значение неинициализировано, скажем

  int i;  // error
  int i = 6;  // okay

Любые мысли или это дублирующий вопрос? Я ценю вашу помощь.

14
задан Nayuki 13 July 2017 в 06:54
поделиться