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

Pytanie dotyczące funkcji (c++)

Object Storage Arubacloud
0 głosów
220 wizyt
pytanie zadane 21 listopada 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)
edycja 21 listopada 2015 przez C☺ndzi

Przykładowa funkcja:
 

void foo(int boo)
switch(boo)
{
case 1: 
...
}

i teraz chciałbym aby zamiast pisać trzy razy "foo(1); foo(2); foo(3);" mógł napisać "foo(1,2,3)". Czy da się tak?

5 odpowiedzi

+1 głos
odpowiedź 23 listopada 2015 przez MetGang Nałogowiec (34,360 p.)
wybrane 23 listopada 2015 przez C☺ndzi
 
Najlepsza

Istnieją 2 znane mi rozwiązania:

---

Pierwszy (staromodny, w stylu C):

#include <cstdarg>

void foo(int arg_count, ...) // arg_count, ilość argumentów, potrzebna do pętli
{
    va_list ap;
    va_start(ap,arg_count);
    for(int i=0; i<arg_count; i++)
    {
        int x=va_arg(ap,int);
        switch(x)
        { /*tu cały mechanizm switcha*/ }
    }
}

Wywołujesz: foo(4,0,1,2,3); Pierwszy argument jest ilością pozostałych argumentów.

---

Drugi (nowocześniejszy, w stylu C++):

#include <initializer_list>

void bar(std::initializer_list<int> il)
{
    std::vector<int> vec(il.begin(),il.end());

    for(unsigned int v=0; v<vec.size(); v++)
    {
        switch(vec[v])
        { /*tu cały mechanizm switcha*/ }
    }
}

Wywołujesz: bar({0,1,2,3}); Zwróć uwagę na klamry {}, są potrzebne wewnątrz nawiasów, nie trzeba podawać ilości argumentów.

0 głosów
odpowiedź 21 listopada 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Jeśli dobrze rozumie twój problem to jeśli masz:


void foo(int boo)
switch(boo)
{
case 1: 
   foo ( 1 )
case 2:
  foo ( 2 )
case 3 
 foo ( 3 )
}

 to one się wykonają  po kolei ( zeby wykonał się tylko np case 1  a nie cała reszta to trzeba umieścić break )

komentarz 21 listopada 2015 przez C☺ndzi Stary wyjadacz (12,100 p.)
Nie wiem do końca jak sformułować pytanie. Chce zeby foo(2,1,165) było równoznaczne z foo(2); foo(1); foo(165) .
0 głosów
odpowiedź 21 listopada 2015 przez niezalogowany
Jeśli chcesz przesłać do funkcji więcej argumentów to możesz. Ale musisz określićczy to int itd. O ile dobrze zrozumiałem Twoje pytanie.
komentarz 21 listopada 2015 przez C☺ndzi Stary wyjadacz (12,100 p.)

Chce zeby np.: foo(2,1,165) było równoznaczne z foo(2); foo(1); foo(165) . 

0 głosów
odpowiedź 21 listopada 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
tak możesz zastosować przeładowanie(przeciążenie funkcji)  i wykorzystać w niej rekurencje np :P w C++ się da
a w C nie
0 głosów
odpowiedź 21 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)

Możesz do funkcji podać kilka argumentów np

void foo(int boo,int bar = 0,int baz=0)

{

//Jakiś kod

}

 

 

Podobne pytania

0 głosów
3 odpowiedzi 172 wizyt
pytanie zadane 22 listopada 2015 w C i C++ przez Konrad Groń Początkujący (450 p.)
0 głosów
0 odpowiedzi 346 wizyt
pytanie zadane 12 kwietnia 2021 w Java przez napoludniestad.pl Użytkownik (960 p.)
0 głosów
1 odpowiedź 405 wizyt
pytanie zadane 24 marca 2023 w HTML i CSS przez zbiku25 Bywalec (2,940 p.)

92,584 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,967 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!

...