typedef definitions
You
can use the typedef
declaration to define your own
identifiers that can be used in place of type specifiers such as int
, float
,
and double
. A typedef
declaration
does not reserve storage. The names you define using typedef
are
not new data types, but synonyms for the data types or combinations
of data types they represent.
The name space for a typedef
name is
the same as other identifiers. When an object is defined using a typedef
identifier,
the properties of the defined object are exactly the same as if the
object were defined by explicitly listing the data type associated
with the identifier.
Using typedef
redeclaration,
you can redefine a name that is a previous typedef
name
in the same scope to refer to the same type. For example:
typedef char AChar;
typedef char AChar;
When any extended
language level is in effect, typedef
redeclaration
supports all types, including a variably modified type.
For more information about variably modified types, see Variable length arrays.
Examples of typedef definitions
LENGTH
as a synonym for int
and
then use this typedef
to declare length
, width
,
and height
as integer variables: typedef int LENGTH;
LENGTH length, width, height;
int length, width, height;
typedef
can
be used to define a structure, union, or C++ class. For example: typedef struct {
int scruples;
int drams;
int grains;
} WEIGHT;
WEIGHT
can
then be used in the following declarations: WEIGHT chicken, cow, horse, whale;
yds
is "pointer
to function with no parameters, returning int
".
typedef int SCROLL(void);
extern SCROLL *yds;
typedef
definitions,
the token struct
is part of the type name: the type
of ex1
is struct a
; the type of ex2
is struct
b
. typedef struct a { char x; } ex1, *ptr1;
typedef struct b { char x; } ex2, *ptr2;
Type ex1
is
compatible with the type struct a
and the type of
the object pointed to by ptr1
. Type ex1
is
not compatible with char
, ex2
, or struct
b
.typedef
name
must be different from any class type name declared within the same
scope. If the typedef
name is the same as a class
type name, it can only be so if that typedef
is a
synonym of the class name. typedef
definition without being named is given
a dummy name. Such
a class cannot have constructors or destructors. Consider the following
example: typedef class {
~Trees();
} Trees;
In this example, an unnamed
class is defined in a typedef
definition. Trees
is
an alias for the unnamed class, but not the class type name. So you
cannot define a destructor ~Trees()
for this unnamed
class; otherwise, the compiler issues an error. Declaring typedef names as friends
In
the C++11 standard, the extended friend declarations feature is introduced,
with which you can declare typedef
names as friends.
For more information, see Extended friend declarations.