gcc n'est pas, par défaut, vérifiez que tous les chemins de code de retour d'une valeur parce qu'en général, cela ne peut être fait. Il suppose que vous savez ce que vous faites. Considérons un exemple de l'utilisation d'énumérations:
Color getColor(Suit suit) {
switch (suit) {
case HEARTS: case DIAMONDS: return RED;
case SPADES: case CLUBS: return BLACK;
}
// Error, no return?
}
Vous le programmeur sait que, en l'absence d'un bug, cette méthode renvoie toujours une couleur. gcc approbations que vous savez ce que vous faites afin de ne pas vous forcer à mettre un retour à la fin de la fonction.
javac, d'autre part, essaie de vérifier que tous les chemins de code de retour d'une valeur et renvoie une erreur si il ne peut pas prouver qu'elles le sont toutes. Cette erreur est mandaté par le Java langage de spécification. Notez que parfois, c'est mal et que vous devez mettre en inutile de l'instruction return.
char getChoice() {
int ch = read();
if (ch == -1 || ch == 'q') {
System.exit(0);
}
else {
return (char) ch;
}
// Cannot reach here, but still an error.
}
C'est une différence philosophique. Le C et le C++ sont plus permissives de confiance et de langages que Java ou C# et ainsi de certaines erreurs dans les nouvelles langues sont des avertissements en C/C++ et certains avertissements sont ignorés ou désactivé par défaut.