Kezdőoldal » Számítástechnika » Programozás » C programozasban lehet olyan...

C programozasban lehet olyan fuggvenyt kesziteni, mely tetszoleges adattipussal (int, double, float ...) meghivhato? Ha igen, hogyan?

Figyelt kérdés

van egy matematikai muveletsorom, de nem szeretnem minden adattipusra kulon definialni. van ra valamilyen megoldas?

irok egy peldat is, hogy mire gondolok, itt 2 szamot adok ossze:


double osszead(double szam_0, double szam_1)

{

return szam_0 + szam_1;

}


int osszead(int szam_0, int szam_1)

{

return szam_0 + szam_1;

}


float osszead(float szam_0, float szam_1)

{

return szam_0 + szam_1;

}



#c programozas
2021. márc. 7. 09:51
 1/5 anonim ***** válasza:
12%

Add át string formájában és lokálisan visszakonvertálod azzá ami.

Amúgy, erre való a variant tipus, de jobb azt erősen kerülni.

2021. márc. 7. 10:08
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
98%

Ezt így C-ben nem lehet megoldani, mert nem támogatja az overload-ot, de C++ban működne.


Stringként átpasszolni nem épp hatákony, attól még talán a void* pointerként átadni is jobb, de ott kell mégegy paramétert, amivel megadod, hogy most float, double vagy int lesz és aztán castolod arra és úgy adod össze.

2021. márc. 7. 10:32
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
10%
2: lol
2021. márc. 7. 10:38
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
15%

Ha a műveleti sebesség is számít, akkor jobb ha olyan függvényt írsz, aminek négy paramétere van, i,d,f és t. A T jelzi a tipust - hogy éppen adott hívásnál melyik érvényes - az i,d,f pedig az értéket.

De lehet ugyanezt struktúrával, vagy ahogy akarod.


Az előttem szóló sajnos nem gondolt bele abba, hogy adott művelet eredményével vissza is kell térnie annak a függvénynek, ami sajnos kikerülhetetlenné teszi a tipuskonverziót. Akkor meg már miért is ne legyen string?

Jaaa, mert így egyszerűbb?

2021. márc. 7. 10:51
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:
100%

1. Ha olyan a függvény jellege, csinálj belőle makrót:


#define osszeadas(x, y) x+y


2. Vagy várj valamilyen X típust, és add át castolva, mint ahogy pl. a bind függvény csinálja:


int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);


Nagyon gyakran sockaddr_in típust adunk át castolva (mivel a sockaddr_in szabadon castolható sockaddr-re):

bind(server_socket, (struct sockaddr*) &server_address, sizeof(server_address));


Az utolsó paraméterben pedig megadjuk az átadott struktúra méretét.


3. Csinálhatod úgy is, hogy void*-ként adod át, mint ahogy a pthread_create csinálja:


int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);


Itt olyan típust adsz át a negyedik paraméterben, amilyet akarsz, illetve a harmadik paraméterben megadott függvény is olyan típust ad vissza, amit akar.

2021. márc. 7. 12:34
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!