<sub>Sorry if this is a duplicate...</sub>

----------

Recently, an answer of Peter Taylor [here](https://codegolf.meta.stackexchange.com/a/14437) says:

> To get a macro equivalent to
> 
>     f(n){n=n?:1;}
> 
> you need
> 
>     -Df(n)=((n)?:1)
> 
> which is longer, so there's no point.

So how should C macros be scored? Which of the following criteria should be satisfied:

* Arguments must be put in parentheses.
* The function itself must be wrapped in parentheses (unless it's single token).
* The argument must be referenced exactly once.
* There should be a trailing newline (if use `#define`) (because you can't put the code right after the macro, you need a trailing newline).
* If there are multiple statements there should be `if(1){...}else` wrap or `do{...}while(0)` wrap.

Real world macros satisfy all three of them (except some nonstandard ones (never used in production code), like

    #define all(x) begin(x), end(x)

macro, then you can do something like

    sort(all(x))

)

----------

Should that be enforced?

* Agree: That's the standard of C macro.
* Agree: That makes the macro more like a real "function".
* Disagree: That may change a lot of existing submission.
* Disagree: Even without that condition, we can call it with variables, and wrap the return value in parentheses. This is "require more input than necessary".
* Disagree: That takes more bytes. (← should not be a problem)