Avatar billede heyn Nybegynder
12. juli 2013 - 10:02 Der er 5 kommentarer og
1 løsning

Hvordan laver man en funktion hvor de sidste argumenter evt. kan udelades (i C, ikke C++)?

Hej Eksperter

Mit spørgsmål er sikkert meget simpelt, men jeg kan bare ikke huske hvordan og kunne ikke finde svaret på nettet.

Jeg ønsker at lave en funktion hvor man evt kan udelade de sidste argumenter, som så bliver tildelt en defaultværdi.
Se nedenstående eksempel hvor b tænkes at have en defaultværdien 3.

int testfunction(int a, int b){
  ...
  return a*b;
}

Hvis jeg skriver

c = testfunction(3,4);

returnerer funktionen som forventet 12 men hvis jeg skriver noget i stil med

c = testfunction(3);

er det tænkt at funktionen skal returnere 9 fordi b har default 3.

Hvordan skal jeg præcist definere testfunction?

Venligst Christian
Avatar billede Slater Ekspert
12. juli 2013 - 13:11 #1
Det du leder efter hedder "function overloading" - og du kan finde en masse om det ved at søge på det.

Dog er det tilsyneladende ikke understøttet af C, jvf. bl.a. denne tråd: http://stackoverflow.com/questions/479207/function-overloading-in-c
Avatar billede arne_v Ekspert
12. juli 2013 - 13:18 #2
I C++ kan du:

int testfunction(int a, int b = 3);

men det findes ikke i C.

Hvis du er villig til at skrive en del kode, saa kan du bruge varargs.

Alternativt kan du bruge flere funktioner - som #1 siger saa understoetter C heller ikke function overlkoading, men man kan stadig definere flere funktioner med forskellige navne!
Avatar billede heyn Nybegynder
12. juli 2013 - 13:39 #3
Tak skal i have.

Smid et svar.

Den metode i C++ som Arne nævner syntes jeg nemlig godt jeg kunne huske fra for 15 år siden da jeg lærte C++. Men jeg kunne jo ikke forstå det ikke fungerede i C.
Nå men så må jeg jo finde på en en el. anden snørklet metode i stil med 2 funktioner
testfunction(int a)
testfunctionproto(int a, int b)

God weekend fra Christian

P.s.
Hvordan deler jeg nu 15 point mellem 2?
Kan man på eksperten.dk øge pointgivning på sit spørgsmål?

P.p.s.
Arne: Mange mange tak for alle de svar du har givet mig på dumme spørgsmål. Jeg havde jo ikke rodet med C i 15 år. Jeg bruger normalt kun PHP.
I onsdags godkendte Nets vores Dankortløsning for hele Norden, så nu skulle det jo gerne ebbe lidt ud med spørgsmål for en tid.
Avatar billede Slater Ekspert
12. juli 2013 - 13:45 #4
Bare giv det til Arne, det var et mere uddybet svar.

Jeg har aldrig selv brugt C, kun C++, så det var egentlig bare en hurtig Google-søgning ;)
Avatar billede arne_v Ekspert
12. juli 2013 - 17:48 #5
svar
Avatar billede segmose Nybegynder
13. juli 2013 - 11:57 #6
Medens jeg endnu kun programerede i C havde jeg for vane at lave en masse macro'er til at løse dette problem

#define Testfunction(X) testfunction(X, 3)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester