funkcje z wieloma argumentami czy zmienne globalne??

mr_psychoo

Użytkownik
Dołączył
Luty 10, 2007
Posty
81
mam pytanie... lepiej uzywac funkcji wywyolywanych z wileoma argumentami czy definiowac wiele funkcji globalnych... bo czytalem gdzies (w symfoni chyba) ze zle jest uzywac wielu zmiennych globalnych bo sa te wszytskie fazy z zaslanianiem nazw. tylko ze pisze swojego crpg i potem mam funkcje typu

Kod:
void karta_post(const char *ekwip[], char imie[], const char klasa[], const char rasa[], int hp, int hpmax, int kp, int poz, int exp, int nast_poz, int sila, int zrecznosc, int kondycja, int moc, int bron1, int bron2, int zloto);

zatem na co sie zdecydowac??

pozdr
 

0wn3r

Były Moderator
Dołączył
Marzec 10, 2007
Posty
1330
Originally posted by mr_psychoo
mam pytanie... lepiej uzywac funkcji wywyolywanych z wileoma argumentami czy definiowac wiele funkcji globalnych... bo czytalem gdzies (w symfoni chyba) ze zle jest uzywac wielu zmiennych globalnych bo sa te wszytskie fazy z zaslanianiem nazw. tylko ze pisze swojego crpg i potem mam funkcje typu

Kod:
void karta_post(const char *ekwip[], char imie[], const char klasa[], const char rasa[], int hp, int hpmax, int kp, int poz, int exp, int nast_poz, int sila, int zrecznosc, int kondycja, int moc, int bron1, int bron2, int zloto);

zatem na co sie zdecydowac??

pozdr

Ja myślę, że lepsze by były funkcje z wieloma argumentami, bo raz mnie spotkała sytuacja z zasłanianiem nazw.
 

cepa

Użytkownik
Dołączył
Maj 11, 2007
Posty
40
unikaj zmiennych globalnych, a skoro masz tyle argumentow to eleganckim rozwiazaniem byloby uzyciue struktory
<
 

loglorus

Użytkownik
Dołączył
Listopad 5, 2006
Posty
54
Najlepiej jak jest za duzo bajerow to modol i wszyscy beda szczesliwi.Przynajmneij bedziesz mial pozadek w kodzie i wszystko ladnie znajdziesz jak bedzie potrzebne. A co do zmeinnych globalnych to faktycznei nie uzywa sie ich jezeli nei jest to konieczne. Wynika to z tego ze przy uzywaniu zmiennej globalnej struktura danych jest za kazdym razem kopiowana do procedur, zajmuje pamiec, zwieksza czas wywolania i obciaza ogolnie. Teraz moze tego nei widac ale kiedys na starych maszynach to byla masakra. A tak wogole nie piszcie jak dzieci microsoftu gdzie jest syf wszedzie. ;p
 

mr_psychoo

Użytkownik
Dołączył
Luty 10, 2007
Posty
81
no obczajam... tylko ze w tym przypadku to moze byc ciezko jakos to efektywnie podzielic bo cala fabule bede chyab pisal w mainie wywolujac tylko funkcje typu walka, karta postaci etc... nie bede tworzyl osobnych funkcji dla rozdzialow bo musailbym przesylac do nich praktycznie wszystkie zmeienne jako argumenty :/
 

loglorus

Użytkownik
Dołączył
Listopad 5, 2006
Posty
54
No ja bym pomyslal przyszlosciowo i podzielil. Wlasnie na walka, postac itp bo keidys mozesz stwierdzic ze walke rozwiniesz, nie wiem o nowe bronie co za tym idzie beda inne obrazenia. Moze dodasz nowe itemy co za tym idzie tzreba je oprogramwoac itd. Wiec ja bym zaczal z dzieleneim odrazu juz teraz puki latwo. A przesylasz to co potzrebujesz. To sa pliki zagniezdzone wiec wywoluje sie jak pojedyncza procedure tudziez funkcje.
 

mr_psychoo

Użytkownik
Dołączył
Luty 10, 2007
Posty
81
nie no to raczej nie jest przyszlosciowy projekt... jak sie lepiej poducze cpp to pojawia sie nowe pomysli i nowe rozwiazanai weic wtedy zaczne pisac od poczatku pewnie... co do tej funkcji walka to bron jest przesylana jako argument...

i jeszcze jedno pytnie... trh nie w temacie ale juz mi sie nie chce nowego watku zakladac


ktore rozwiazanie lepiej stosowac??

Kod:
while(1)

{

cin >> a;

if(a == 5) break;

}

czy

Kod:
do

{

cin >> a;

}while (a != 5);

pozdr
 

loglorus

Użytkownik
Dołączył
Listopad 5, 2006
Posty
54
No to zalezy co chcesz osiagnac. Jedno sprawdza warunek przed wykonaniem operacji a drugie po wykonaniu. Czyli ze w moze byc tak ze ma chociaz raz wykonac cos lub moze meic mozliwosc pominiecia.
 

mr_psychoo

Użytkownik
Dołączył
Luty 10, 2007
Posty
81
wiem na jakiej zasadzie dzialaja i o co chodzi xD mowie tu o tym konkretnym przykladzie... ktora konstrukcja jest lepsza??
 

loglorus

Użytkownik
Dołączył
Listopad 5, 2006
Posty
54
a ja odpowiadam. Zalezy co chcesz osiagnac. W pierwszym przypadku zostawiasz sobie miejsce na ominiecie tego przy takiej konstrukcji. Wogole co to jest to while(1) ? To tak nei moze wygladac. ;p
 

mr_psychoo

Użytkownik
Dołączył
Luty 10, 2007
Posty
81
nie rozumiesz mnie
<
chodzi mi czy lepiej zrobic petle ktora bedzie krecila sie w kolko dopoki nie zostanie spelniony warunek if przez co zostanie zrealizowana instr break, czy poprostu do... while??

pytam czysto teoretycznie bo chce sie oprzec na jednym stalym schemacie a bedzie mi to czesto poterzebne przy konczeniu ww crpg...
 

loglorus

Użytkownik
Dołączył
Listopad 5, 2006
Posty
54
ogolnie break to tak jak goto badziew. Mozna uzywac kiedy jest konieczny czyli przy swich ale tak to sie unika. Widec ja optuje na modelu bez brake. prowadzi do zwiekszenai zlozonosci algorytmu. ;p Poza tym ja wole sprawdzic warunek zanim kaze wykonac operacje. Pozwala na niedopuszczenie wykonanai jakiegos naduzycia.
Teraz odpwoeidzialem na pytanie? :faja:
 

cepa

Użytkownik
Dołączył
Maj 11, 2007
Posty
40
eh przyklad bo widze ze herezje piszecie:p

typedef struct cus {
int a, b, c, d, e, f, g, h;
} CUS;

//funckja ktora operuje na 8 parametrach niejako:

void funkcja(CUS *c)
{
c->a = 1;
c->b = 2;
c->c = 3;
c->d = 4;
c->e = 5;
c->f = 6;
c->g = 7;
c->h = 8;
}

// wywolanie np:

CUS mojcus;
memset(&mujcus, 0, sizeof mujcus);
funkcja(&mujcus);

ktos tam wyzej pisal jakies glupoty o pamieci itd, otoz wszystko jest przekazywane poprzez wskazniki i stos wiec obciazenie jest zadne, nie uzywa sie zmiennych globalnych odkad istnieje programowanie wielowatkowe z tego wzgledu ze dwa watki moga w jednym czasie zarzadac dostepu do danego tego samego obszaru pamieci i jest problem, do rozwiazania wprawdzie (mutex) ale poco utrudniac sobie zycie
<
 
Do góry Bottom