All are optional, but, except for function declarations, at least one such specifier or qualifier must be present. Storage-class keywords are auto , static , extern , and register .
Type qualifiers are const and volatile .
The declarator is the name of the object or function being declared. Initializers are optional and provide the initial value of an object. Initializers can be a single value or a brace-enclosed list of values, depending on the type of object being declared. A declaration determines the beginning of an identifier's scope. An identifier's linkage is determined by the declaration's placement and its specified storage class.