Declarations associate a name (the <identifier>) with a storage cell or block of code and are required for all variables and functions. The scope of the name is determined by its position as global or local to the enclosing block. Definitions allocate storage of the appropriate <type>. In general, variable declarations also define, with the exception of extern declarations.
where <type_specifier> is:
with <class> may be auto (default), register, static, or extern;
<qualifier> may be const or volatile (default);
and <type> may be:
where <size> must be a constant integer indicating the size of each dimension of the array.
Functions are declared with a prototype statement:
and are defined as:
where <block> is:
Type definitions create aliases for existing types.