Depuis que j'ai réalisé il y a de nombreuses années, que cela ne produisait pas d'erreur par défaut (au moins dans GCC), je me suis toujours demandé pourquoi?
Je comprends que vous pouvez émettre des indicateurs de compilateur pour produire un avertissement, mais cela ne devrait-il pas toujours être une erreur? Pourquoi est-il logique qu'une fonction non vide ne renvoyant pas de valeur soit valide?
Un exemple comme demandé dans les commentaires:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
... compile.
-Werror=return-typetraitera juste cet avertissement comme une erreur. J'ai simplement ignoré l'avertissement et les quelques minutes de frustration à la recherche d'un thispointeur invalide m'ont conduit ici et à cette conclusion.
std::optionalfonction sans retourner renvoie un "vrai" facultatif