#define
ステートメントを使用してコードを単純化しようとしています。#define
これは、明白な代替関数を使用して繰り返すことができないコードの反復的な「チャンク」が多数含まれているためです。これらのチャンクでは、ステートメントで行うように変数を宣言する必要があるためです#define dostuff(name) int name##Variable;
。
コード
#define createBody(name,type,xpos,ypos,userData,width,height) b2BodyDef name##BodyDef;\
name##BodyDef.type = type==@"dynamic"?b2_dynamicBody:b2_staticBody;\
name##BodyDef.position.Set(xpos,ypos);\
name##BodyDef.userData = userData;\
name=world->CreateBody(&name##BodyDef);\
b2PolygonShape name##shape;\
name##shape.SetAsBox(width/ptm_ratio/2,height/ptm_ratio/2);
...そしてそれを次のように適用します:
createBody(block, @"dynamic", winSize.width*5/6/ptm_ratio, winSize.height*1/6/ptm_ratio, ((__bridge void*)blockspr), blockspr.contentSize.width, blockspr.contentSize.height)
// error appears there: ^
今私のポイントは、私を驚かせている単一のものを除いて、すべてがうまく機能していて、エラーがないということです:
予期される非修飾ID
示されているように、これはの最初の括弧を指し((__bridge ...
ます。(その引数は、へのuserData
引数を介して渡されcreateBody
ます。)
このコードは決して単純ではありませんが、他のすべてが機能しているので、答えが存在する必要があると思います。
これがSOに関する私の最初の質問です。不明な点や不十分な点がある場合は、お知らせください。