Lekcja 17 zad.3
Ostatnio zmodyfikowano 2017-03-15 04:56
IceMan85PL Temat założony przez niniejszego użytkownika |
Lekcja 17 zad.3 » 2017-03-14 19:45:54 Wiatm. Czy moze mi ktos wyjasnic dlaczego moja funkcja losowanie() w zadaniu zwraca wartosc z wylosowanej liczby choc nie dodalem kluczowego slowa return a; . Tresc zadania: Napisz funkcję, która losuje liczbę z przedziału od 50 do 60 włącznie. Wywołaj funkcję kilka razy (wypisz wylosowane wartości na ekran) w celu przetestowania czy działa ona poprawnie. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int losowanie() { int a; a =( rand() % 11 ) + 50; }
int main() { srand( time( NULL ) ); cout << losowanie() << endl << losowanie() << endl << losowanie() << endl << losowanie(); return 0; }
|
|
czaffik |
» 2017-03-14 20:31:26 No proszę jaka ciekawostka. Myślałem że możliwość pominięcia instrukcji return w C++ jest "błędem" (poniekąd jest, może prowadzić do niezrozumiałych wyników), a tu funkcja zwraca ostatnią wartość jaka nawinęła jej się na rękę. Jednak uwaga, wystarczy że dodasz jakąś nową instrukcję za przypisaniem "a" i już wyskakują ci "naprawdę losowe wartości". Nie jestem w stanie odpowiedzieć czy twórcy kompilatora postanowili tak sobie zrobić czy to standard c++. |
|
Elaine |
» 2017-03-15 04:56:35 To, że tak się stało, to czysty przypadek, bo może stać się cokolwiek. 6.6.3/2: Flowing off the end of a constructor, a destructor, or a function with a cv void return type is equivalent to a return with no operand. Otherwise, flowing off the end of a function other than main (3.6.1) results in undefined behavior. |
Oczywiście w praktyce to nie jest problem, bo jeśli używa się -Werror=return-type, to kompilator wyrzuca błąd. |
|
« 1 » |