Acabo de tener un comportamiento extraño de una versión de g ++ para Windows que obtuve con Strawberry Perl. Me permitió omitir una declaración de devolución.Omitir declaración de devolución en C++
que tienen una función miembro que devuelve una estructura que consta de dos punteros, llamado boundTag
:
struct boundTag Box::getBound(int side) {
struct boundTag retBoundTag;
retBoundTag.box = this;
switch (side)
{
// set retBoundTag.bound based on value of "side"
}
}
Esta función me dio una mala salida, y descubrí que no tenía ninguna instrucción de retorno. Tuve la intención de devolver retBoundTag
pero olvidé escribir la declaración de devolución. Una vez que agregué return retBoundTag;
todo estaba bien.
Pero probé esta función y obtuve la salida correcta de boundTag
. Incluso ahora, cuando elimino la declaración de devolución, g ++ la compila sin previo aviso. WTF? ¿Adivina devolver retBoundTag
?
Debe compilar usando '-Wall'. Las declaraciones de devolución faltantes son capturadas por '-Wreturn-type'. – jweyrich
Tiendo a convertir la advertencia sobre un retorno faltante en un error con: '-Werror = return-type'. Me ahorro mucho tiempo. –