| 

.NET C# Java Javascript Exception

2
hallo, ;)

Habe eine Funktion die mehrmals verwendet wird, ich sie aber in einer Form brauche wo ich ihr einen Funktionsparamter mehr übergebe. Geht das irgendwie ?

#include <stdio.h>
#include <stdlib.h>

// diese Funktion mit optionalen Paramtern erweitern
int func(int a, int b)
{
return a+b;
}

// Habe mir soerwas vorgestellt
int func1(int a,int b,int c = 0)
{
return (a+b+c);
}

// Hier soll kein Fehler geworfen. Egal ob man 2 oder 3 Parameter mitgibt.
int main(void) {
int a = func1(12,5); // 1.)Irgendwie möglich ?
a = func1(12,5,3); // 2.)Irgendwie möglich ?
return EXIT_SUCCESS;
}
07.01.2014
Blackstore 113 5
1 Antwort
0
Du könntest stdarg.h verwenden.

Wenn es nur um sehr wenige Parameter geht ist vielleicht ein Ansatz mit Pointern geeigneter.

#include <stdio.h>
#include <stdlib.h>

int func1(int a,int b,int* c)
{
if(c == NULL) { // Wenn c auf NULL zeigt
return a+b;
}
return (a+b+ *c); // c derefernzieren und wert verrechnen
}

int main(void) {
int a = func1(12,5, NULL); // NULL Adresse übergeben
printf("%i\n", a);
int v = 3;
a = func1(12,5, &v); // Adresse übergeben
printf("%i\n", a);
return EXIT_SUCCESS;
}


Der Nachteil ist, dass für die variablen Parameter dann immer NULL übergeben werden muss, wenn diese nicht verwendet werden (also genau so viele NULL wie variable Parameter). Und wenn der Compiler das nicht prüft, dann ist ein vergessenes & vor der Variablen ein fieser Bug.

Welcher Ansatz besser geeignet ist hängt wohl von der Anzahl der optionalen Parameter und vom persönlichen Geschmack ab.

Edit: Oder wenn es nur ein bis zwei optionale Parameter sind wäre das einfachste wohl folgendes:

int func2(int a,int b)
return (a+b);
}

int func1(int a,int b, int c)
{
return func2(a+b) + c;
}
07.01.2014
phg 1,6k 3

Stelle deine C-Frage jetzt!