• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

kod działa, a raczej nie powinien - funkcje zwracające

Cloud VPS
0 głosów
297 wizyt
pytanie zadane 17 października 2016 w C i C++ przez niezalogowany

Witam, znalazłem kod, który oblicza silnie, jednak dlaczego on działa skoro funkcja typu int nic nie zwraca? Raz, że wgl on się kompiluje dwa, że działa w pełni poprawnie

#include <iostream>

using namespace std;

int wynik;

int silnia(int dane)
{
 if(dane!=1)wynik=silnia(dane-1)*dane;
}

int main()
{
int n;
cin>>n;
cout<<silnia(n)<<endl;
return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 17 października 2016 przez Evelek Nałogowiec (28,960 p.)
Kompiluje się, bo jest poprawnie napisany kod. Jak to funkcja typu int nic nie zwraca? Pobiera jako parametr to co wpiszesz do zmiennej 'n' a następnie zwraca zmienną 'wynik'.
komentarz 17 października 2016 przez unknown Nałogowiec (39,560 p.)
Ja tam nie widzę, żeby ta funkcja cokolwiek zwracała.
komentarz 17 października 2016 przez Evelek Nałogowiec (28,960 p.)
Undefined behaviour i dlatego zwraca 'wynik'.
komentarz 17 października 2016 przez MetGang Nałogowiec (34,360 p.)

Kompilator robi to w domyśle i zwraca jedną ze zmiennych używanych w funkcji. Tak jak napisał unknown jest to undefined behavior, czyli coś czego powinno się unikać.

komentarz 17 października 2016 przez unknown Nałogowiec (39,560 p.)

To jest UB. Nie można powiedzieć co zwraca funkcja.

zwraca jedną ze zmiennych używanych w funkcji.

Może, ale nie musi.

0 głosów
odpowiedź 17 października 2016 przez Szahid Pasjonat (20,970 p.)
Wynik jest zmienną globalną więc można z niego korzystać we wszystkich funkcjach. Kompilator domyślnie wybiera wartość którą zwróci funkcja jeżeli Ty jasno tego nie określisz ( chyba że to funkcja void, wtedy nic nie zwróci )
komentarz 17 października 2016 przez Szahid Pasjonat (20,970 p.)
Pierwsze zdanie w sumie jest zbędne
–1 głos
odpowiedź 17 października 2016 przez unknown Nałogowiec (39,560 p.)
Jeśli typ zwracanej wartości z funkcji jest różny niż void a funkcja nic nie zwraca to wtedy kod ma UB

Podobne pytania

0 głosów
2 odpowiedzi 502 wizyt
pytanie zadane 20 października 2016 w C i C++ przez Dawid Zając Nowicjusz (150 p.)
0 głosów
1 odpowiedź 291 wizyt
pytanie zadane 28 lutego 2017 w JavaScript przez Crazzier Początkujący (350 p.)
0 głosów
3 odpowiedzi 348 wizyt
pytanie zadane 13 lutego 2017 w JavaScript przez KONDZIU Użytkownik (550 p.)

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,833 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...