Kompliziertes typedef in C
Bio
- programmiertechnik
1 Christian Seiler0 Bio
0 Der Martin0 Bio
Sup!
Aus irgendeinem Grund brauche ich in meinem Programm ein Array von Zeigern auf Funktionen mit Rückgabewert int. Also quasi:
int (*func_array[])() = {func1,func2};
(func_array ist ein Vektor/Array von Zeigern auf Funktionen undefinierten Types mit Rückgabewert int)
Nun ist die Frage, ob man mit typedef einen Typen dafür deklarieren könnte.
Also ob mit typedef [irgendwas] func_array_type einen Typen definieren kann, so dass man dann mit
func_array_type func_array = {func1, func2}; ein Funktions-Array definieren könnte.
Vielleicht geht ja einfach
typedef int (*func_arraytype[])(); ?
Möglicherweise kann man aber in einem typedef auch keine Vektor/Array-Klammern [] ohne konstanten Wert nutzen, und es muss eher
typedef int (*func_arraytype)(); ?
und
func_array_type func_array[] = {func1, func2};
heissen?
Irgendwelche Tipps?
Gruesse,
Bio
Hallo Bio,
Irgendwelche Tipps?
Kernighan/Ritchie, Programmieren in C. *scnr*
Spaß beiseite:
#include <stdio.h>
int func1() {
printf("func1\n");
return 1;
}
int func2() {
printf("func2\n");
return 2;
}
typedef int ((*func_arraytype[])());
func_arraytype func_array = { func1, func2 };
int main (int argc, char **argv) {
printf("%d\n", func_array[0]());
printf("%d\n", func_array[1]());
return 0;
}
Viele Grüße,
Christian
Sup!
Kernighan/Ritchie, Programmieren in C. *scnr*
Liegt neben mir, aber genützt hat's nichts! ;-)
Vielen Dank auf jeden Fall,
Gruesse,
Bio
---
Do ut des!
Hallo Bio,
Aus irgendeinem Grund brauche ich in meinem Programm ein Array von Zeigern auf Funktionen mit Rückgabewert int. Also quasi:
int (*func_array[])() = {func1,func2};
Müsste es nicht richtig
int (*func_array)()[] = {func1,func2};
heißen? Also erst den Basistyp deklarieren, dann die Array-Indexklammern? Die Indexklammern müssten meiner Ansicht nach außerhalb der runden Klammern stehen, weil die Array-Bildung ja der letzte Schritt bei der Deklaration dieses komplexen Typs ist.
Ich habe so aufwendige Konstrukte bisher nicht benutzt aber...
Mit einer zweistufigen Deklaration müsste es eigentlich klappen:
typedef int(*func)() functype;
functype func_array[] = {func1, func2};
(func_array ist ein Vektor/Array von Zeigern auf Funktionen undefinierten Types mit Rückgabewert int)
Genau das müsste nach meiner Einschätzung bei der obigen Deklaration herauskommen.
So long,
Martin
Sup!
Müsste es nicht richtig
int (*func_array)()[] = {func1,func2};
heißen?
Nein, das müsste man dann nämlich so lesen:
func_array ist ein Zeiger auf eine Funktion mit Rückgabewert int ... und dann hängen die eckigen Klammern da so in der Landschaft rum und ergeben keinen Sinn. In jedem C-Buch gibt es so einen Abschnitt "komplizierte Vereinbarungen interpretieren", der hilft, das zu verstehen.
Gruesse,
Bio