Point taken, but that raises another point: how would EA import the example you noted? Does it import it as an operation and then use the "define" tag to know it's really a macro so that it can round-trip the code successfully? If so, the error I noted wouldn't be a problem if code generation is all you care about. But some of us (like me) also use EA to generate documentation of existing software for clients, and identifying a #define with a constant "argument" in parentheses as a C function is, as you noted, an error. And EA doesn't do this with all such #defines - the following example is not imported as an operation:
#define TCU_IN_TORQUE_INVERTER_1_FEEDBACK_LDTNDX ( TCU_BASE_LDTNDX + 16 )
This imports as an attribute, i.e.
static const <no type> TCU_IN_TORQUE_INVERTER_1_FEEDBACK_LDTNDX = ( TCU_BASE_LDTNDX + 16 )
Why the inconsistency?
If attributes were allowed to have "illegal" names (for #define only, perhaps - but why not for everything?), then there's no reason why you couldn't have an attribute
static const <no type> MIN(X, Y) = ((X) < (Y) ? (X) : (Y))
There's an option for ignoring spaces (and other illegal characters) in class names; why not a similar option for class member names?
To sum up, importing a #define like
#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
as an operation may work as a trick for code round-tripping, but it's bad news for code documentation. The resulting model is just wrong.
Cheers,
Fred W