#define mySynthesize(op) @synthesize op = _op;
So rather than typing
@synthesize someVar=_someVar; @synthesize otherVar=_otherVar;
When you prefix the op with an underscore, the preprocessor treats it as a different token, so it doesn't get replaced. You need to use ## to concatenate the underscore to the front so that the replacement occurs first.
op
##
#define mySynthesize(op) @synthesize op = _ ## op