Ich implementiere einfache Bibliothek für Listen in C, und ich habe ein Problem mit dem Schreiben find
Funktion.Wie schreibe ich C-Funktion akzeptiert (ein) Argument von einem beliebigen Typ
würde ich meine Funktion wie jede Art von Argument zu akzeptieren, zu finden, die beide: find(my_list, 3)
und find(my_list, my_int_var_to_find)
. Ich habe bereits Informationen, was ist der Typ der Liste Elemente.
Für jetzt habe ich gefunden paar Möglichkeiten, mit diesem zu tun:
andere Funktion mit Suffix für verschiedene Arten:
int findi(void* list, int i)
,int findd(void* list, double d)
- aber ich weiß nicht, wie dieser Ansatz scheint es, wie Redundanz für Ich und eine API ist verwirrend.mit Gewerkschaft:
typedef union { int i; double d; char c; ... } any_type;
aber auf diese Weise ich beide zu erzwingen, dass Benutzer wissen über
any_type
Vereinigung, und es vonfind
vor Aufruf zu erstellen. Ich möchte das vermeiden.mit Variadic-Funktion:
int find(void* list, ...)
. Ich mag diesen Ansatz. Ich bin jedoch besorgt über keine Einschränkungen der Anzahl der Argumente. Der Benutzer kannint x = find(list, 1, 2.0, 'c')
schreiben, obwohl ich nicht weiß, was es bedeuten soll.
Ich habe auch Antwort auf diese Frage gesehen: C : send different structures for one function argument aber es ist irrelevant, weil ich nicht-Zeiger Argumente annehmen möchten.
Was ist der richtige Umgang mit dieser Funktion?
Es gibt keins. – Mehrdad
Ich würde Ansatz Nr. 1 und verwenden Sie ein Makro mit dem neuen C11 '_Generic' für die Unterscheidung von Typ. – oldrinb