• 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

Object Storage Arubacloud
0 głosów
193 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,930 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,930 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 314 wizyt
pytanie zadane 20 października 2016 w C i C++ przez Dawid Zając Nowicjusz (150 p.)
0 głosów
1 odpowiedź 212 wizyt
pytanie zadane 28 lutego 2017 w JavaScript przez Crazzier Początkujący (350 p.)
0 głosów
3 odpowiedzi 283 wizyt
pytanie zadane 13 lutego 2017 w JavaScript przez KONDZIU Użytkownik (550 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,966 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...