mam szereg funkcji z tego samego prototypu, powiedzmyCzy prototyp funkcji typedef może być używany w definicjach funkcji?
int func1(int a, int b) {
// ...
}
int func2(int a, int b) {
// ...
}
// ...
Teraz chcę, aby uprościć ich definicji i deklaracji. Oczywiście mógłbym użyć makra tak:
#define SP_FUNC(name) int name(int a, int b)
Ale chciałbym, aby utrzymać go w C, więc próbowałem użyć specyfikatora przechowywania typedef
na to:
typedef int SpFunc(int a, int b);
Wydaje się, działać dobrze dla deklaracji:
SpFunc func1; // compiles
ale nie dla definicji:
SpFunc func1 {
// ...
}
która daje mi następujący błąd:
error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
Czy istnieje sposób, aby to zrobić prawidłowo, czy jest to niemożliwe? Dla mojego zrozumienia C to powinno zadziałać, ale tak nie jest. Czemu?
Uwaga, gcc rozumie, co próbuję zrobić, bo jeśli piszę
SpFunc func1 = { /* ... */ }
mówi mi
error: function 'func1' is initialized like a variable
Czyli gcc rozumie, że SpFunc jest funkcją rodzaj.
Bałem się tego. Dzięki za potwierdzenie tego. Czy istnieje uzasadnienie tego? Wydaje mi się, że to przydatna funkcja. – bitmask
@bitmask: funkcje mogą współdzielić typedef, ale mają inaczej nazwane argumenty - nazwy nie są częścią podpisu funkcji i można je nawet pominąć, jeśli deklaracja nie jest częścią definicji – Christoph