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

Odpowiednik dla "goto" między funkcjami

VPS Starter Arubacloud
–2 głosów
1,432 wizyt
pytanie zadane 15 maja 2017 w C i C++ przez Chlebojad Nowicjusz (190 p.)
edycja 15 maja 2017 przez Chlebojad

Czy jest jakiś odpowiednik dla goto między funkcjami? Ponieważ pisze walkę w funkcji "void()" i chciałbym powróćić do "int main()" ale wyskakuje error że nie mogę :/

 nazwa_bo_sie_czepiaciexD void(int x)
{
cout<<"losowy tekst"<<endl;
goto START;
}
int main()
{
START:
cout<<"losowy tekst"<<endl; 
}

 

komentarz 15 maja 2017 przez Dexterim Dyskutant (8,370 p.)
Wypadało by najpierw nadać jakąś nazwe funkcji :)

2 odpowiedzi

+2 głosów
odpowiedź 16 maja 2017 przez WilmaOlcho Obywatel (1,740 p.)

Użycie goto w C i C++ jest bardzo nieestetyczne i niepotrzebne.
Nie używa się ich już na pewno pomiędzy funkcjami z prostej przyczyny:
Kiedy funkcja jest generowana w pamięci, tworzony jest stos ze zmienymi, zajmuje to pewien obszar pamięci i jest wygodne do użycia dla procesora. Funkcja zwracając wynik, lub kończąc pracę kiedy jest typu void usuwa jednocześnie wcześniej utworzony stos i zwraca do ogólnej póli zasobów wcześniej używaną pamięć.
Kiedy próbujesz wyjść z funkcji przed zakończeniem jej pracy, stos nie soztaje usunięty i zajmuje choć z pozoru niewielką ilość pamięci, to po kilku tysiącach wywołań zaczyna sprawiać problemy. Realne stają się wówczas przekroczenie stosu i awaria programu.
Z tego powodu istnieje wiele ułatwień, jak polecenia break i continue
Przykład:
 

for (int i=0;i<10;i++){
    if (i==5) continue;
    if (i==8) break;
    std::cout << i << " Na pewno nie jest piatka!"<<std::endl;    
}

W tym przypadku na ekranie konsoli wyświetlą Ci się liczby 0, 1, 2, 3, 4, 6, 7.
Ponieważ gdy zostanie wywołane polecenie continue, pętla pominie zawarty poniżej kod i zacznie kolejny krok,
a polecenie break zakończy działanie pętli niezależnie od tego czy warunki końcowe zostały spełnione czy nie.

I niestety wszystkie warunki wywoływania funkcji, powinny być zawarte w funkcji int main(), lub w innych funkcjach, nie jest możliwe by przejść do środka niewywołanej funkcji, ani nie jest dobrym pomysłem wychodzić z niej przy pomocy goto.

komentarz 16 maja 2017 przez Knayder Nałogowiec (37,640 p.)
Błagam, nie używaj tak oczojebnych kolorów. Jest już trochę późno i ten niebieski tekst jest w moich oczach cały rozmazany. Musiałem przybliżyć twarz do monitora :\
Szczególnie na ciemnym motywie :|
komentarz 16 maja 2017 przez WilmaOlcho Obywatel (1,740 p.)
Wybacz, nawyk pokazywania instrukcji w takim kolorze w jakim mi się pokazują na ekranie gdy wpisuję je w edytorze.
+1 głos
odpowiedź 15 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
Nie dziwie się, że masz błędy jak nie nazywasz funkcji.

Druga rzecz, że GO TO jest dla frajerów, więc staraj sięnie używać go. W 99,9% zawsze da się poradzić bez niego ;)
komentarz 16 maja 2017 przez Milesq Nałogowiec (32,020 p.)
bardzo zanieczyszcza kod i utrudnia czytanie go. zobacz co ci latwiejj przeczytac

ala

ma

niebieskiego

kotka

 

czy może to:

goto 3;

1.kot

goto 5;

2.przez

goto 4;

3.czerwony

goto 1;

4.ulicę

return "zły sposób:(";

5.przeszedł

goto 2;
1
komentarz 16 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)

@QizmoPL- równie dobrze można powiedzieć tak o wszystkim. Czy wiesz, że na pewno adres jest bezpośrednim adresem w pamięci czy nie przesuniętym o dwa, a przy odwoływaniu się do elementu cofa o dwa - czy tylko się tak naczytałeś? Chyba większość, rzeczy przyswaja się poprzez czytanie + naukę od osób bardziej ogarniętych...

komentarz 16 maja 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
goto jest zle tylko w nieodpowiednich rekach, tak jak wszystko, faktycznie moje zdnie nie bylo zbyt celne
1
komentarz 16 maja 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
No i ja się z Twoją wypowiedzią zgadzam. Ale czy uważasz, że kolega ma wystarczającego skilla do stosowanie goto.
1
komentarz 16 maja 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
sadzac po kawalku kodu, wydaje mi sie, ze zdecydownie nie

Podobne pytania

0 głosów
1 odpowiedź 148 wizyt
0 głosów
3 odpowiedzi 875 wizyt
pytanie zadane 29 listopada 2015 w Java przez b00ny Mądrala (6,050 p.)
0 głosów
2 odpowiedzi 144 wizyt
pytanie zadane 15 grudnia 2016 w C# przez norbik543 Użytkownik (690 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...