4

私は他の誰かによって書かれたコードを使用しています。そこでは、彼らは関数ポインターを使用するつもりです。彼らは私が理解できない非常に奇妙なtypdefをします。コードの下

typedef void (myType)(void);
typedef myType *myTypePtr;

の主なアイデアmyTypePtrは、「voidを受け取り、voidを返す関数へのポインタを作成することです。しかし、元myTypeの関数はどうですか?関数型ですか?私にはわかりません。

さらに、後でこの関数プロトタイプがあります

int createData(int id,int *initInfo, myTypePtr startAddress)

ただし、「myTypePtr」の前に「予期される宣言指定子または「...」」というコンパイルエラーが発生します。なぜこれが発生するのかわかりません。ありがとうございます。

4

1 に答える 1

4

これが最初typedef

typedef void (myType)(void);

myType型の同義語として、void (void)引数をとらずにを返す関数の型を提供しますvoid。ここでは、括弧myTypeは実際には必要ありません。あなたも書くことができます

typedef void myType(void);

voidを受け取り、返す関数のタイプであることを明確にするためvoid。関数型の変数を実際に宣言することはできないことに注意してください。Cで関数型のオブジェクトを取得する唯一の方法は、実際の関数を定義することです。

二番目typedef

typedef myType *myTypePtr;

次に、それはmyTypePtr、へのポインタと等しい型を持っていると言います。myTypeこれは、引数をとらずにを返す関数へのポインタであることを意味しますvoid。この新しいタイプはタイプと同等ですvoid (*)(void)が、少し間接的に行われます。

2番目のエラーについては、コンテキストがないと何が起きているのかはっきりとは言えません。エラーの原因を確認できるように、最小限のテストケースを投稿してください。

お役に立てれば!

于 2012-07-20T17:45:03.557 に答える