Next: Local Variables, Previous: Designated Initializers, Up: Variables [Contents][Index]
__auto_typeYou can declare a variable copying the type from
the initializer by using __auto_type instead of a particular type.
Here’s an example:
#define max(a,b) \
  ({ __auto_type _a = (a); \
      __auto_type _b = (b); \
    _a > _b ? _a : _b })
This defines _a to be of the same type as a, and
_b to be of the same type as b.  This is a useful thing
to do in a macro that ought to be able to handle any type of data
(see Using __auto_type for Local Variables).
The original GNU C method for obtaining the type of a value is to use
typeof, which takes as an argument either a value or the name of
a type.  The previous example could also be written as:
#define max(a,b) \
  ({ typeof(a) _a = (a); \
      typeof(b) _b = (b); \
    _a > _b ? _a : _b })
typeof is more flexible than __auto_type; however, the
principal use case for typeof is in variable declarations with
initialization, which is exactly what __auto_type handles.