Next: Local Variables, Previous: Designated Inits, 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 Macros and Auto Type).
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.