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-type
potraktuje to ostrzeżenie jako błąd. Właśnie zignorowałem ostrzeżenie, a kilka minut frustracji w poszukiwaniu nieprawidłowego this
wskaźnika doprowadziło mnie tutaj i do tego wniosku.
std::optional
funkcji bez zwracania zwraca „true” opcjonalne