Odkąd wiele lat temu zdałem sobie sprawę, że domyślnie nie powoduje to błędu (przynajmniej w GCC), zawsze zastanawiałem się, dlaczego?
Rozumiem, że możesz wysyłać flagi kompilatora, aby wygenerować ostrzeżenie, ale czy nie powinno to zawsze być błędem? Dlaczego ma sens, aby funkcja nieważna, która nie zwraca wartości, była prawidłowa?
Przykład zgodnie z prośbą w komentarzach:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
... kompiluje się.
-Werror=return-typepotraktuje to ostrzeżenie jako błąd. Właśnie zignorowałem ostrzeżenie, a kilka minut frustracji w poszukiwaniu nieprawidłowego thiswskaźnika doprowadziło mnie tutaj i do tego wniosku.
std::optionalfunkcji bez zwracania zwraca „true” opcjonalne