typedef name = exp;This is useful in conjunction with the statements-within-expressions feature.
The following shows how the two together can be used to define a safe “maximum” macro that operates on any arithmetic type.
#define max(a,b) \
({typedef _ta = (a), _tb = (b); \
_ta _a = (a); _tb _b = (b); \
_a > _b ? _a : _b; })
The reason for using names that
start with underscores for the local variables is to avoid conflicts with
variable names that occur within the expressions that are substituted for
‘a’
and ‘b’.
Eventually we hope to design a new form of declaration syntax that allows
you to declare variables whose scopes start only after their initializers;
this will be a more reliable way to prevent such conflicts.