Почему при отсутствии оператора return не возникает ошибка компилятора?

В отличие от Java, в C / C ++ разрешено :

int* foo ()
{
  if(x)
    return p;
// what if control reaches here
}

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

Есть ли какой-либо флаг в gcc / msvc для обеспечения этого? (что-то вроде -Wunused-result )

15
задан iammilind 7 June 2011 в 08:22
поделиться