同じプロトタイプの一連の関数があります。
int func1(int a, int b) {
// ...
}
int func2(int a, int b) {
// ...
}
// ...
今、私はそれらの定義と宣言を単純化したいと思います。もちろん、次のようなマクロを使用することもできます。
#define SP_FUNC(name) int name(int a, int b)
しかし、私はそれをCで保持したいので、これにストレージ指定子を使用しようとしましtypedef
た。
typedef int SpFunc(int a, int b);
これは、宣言に対しては正常に機能しているようです。
SpFunc func1; // compiles
しかし、定義のためではありません:
SpFunc func1 {
// ...
}
これにより、次のエラーが発生します。
error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
これを正しく行う方法はありますか、それとも不可能ですか?私のCの理解では、これは機能するはずですが、機能しません。なんで?
注意してください、gccは私がやろうとしていることを理解しています。
SpFunc func1 = { /* ... */ }
それは私に教えてくれます
error: function 'func1' is initialized like a variable
つまり、gccはSpFuncが関数型であることを理解しています。