tomsmeding
tomsmeding

Reputation: 926

"Expected unqualified-id" in #define statement

I'm trying to simplify my code by using #define statements. This is because it contains a lot of repetitive "chunks" of code that cannot be repeated using the obvious alternative, functions, because in these chunks, variables need to be declared like you'd do in a #define statement, e.g. #define dostuff(name) int name##Variable;.


Code

#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);

... and applying that in the following:

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:  ^

Now my point is that everything's working great, no errors, except a single one that's freaking me out:

Expected unqualified-id

which points at the first bracket in ((__bridge ..., as indicated. (That argument gets passed via the userData argument to createBody.)

I know this code is nowhere near simple, but since everything else is working, I believe that an answer must exist.

This is my first question on SO, so if there's anything unclear or insufficient, please let me know!

Upvotes: 0

Views: 613

Answers (1)

CodeSmile
CodeSmile

Reputation: 64477

I'm trying to simplify my code by using #define statements.

This sounds an alarm in my mind.

Break this down into functions. You said you can't. I say you can.

Notice that your macro here:

createBody(name,type,xpos,ypos,userData,width,height);

It has exactly the same syntax as a C function. So you've already created a function, you only declared it as a macro. There's no reason why you couldn't rewrite it as a function (C or Objective-C doesn't matter). You do not need to give each body its own name, instead you could store them in a dictionary (careful though because Box2D takes ownership of the bodies).

Upvotes: 1

Related Questions