### Name Spaces

The compiler sets up name spaces to distinguish among identifiers referring to different kinds of entities. Identical identifiers in different name spaces do not interfere with each other, even if they are in the same scope.

You must assign unique names within each name space to avoid conflict. The same identifier can be used to declare different objects as long as each identifier is unique within its name space. The syntactic context of an identifier within a program lets the compiler resolve its name space without ambiguity.

Identifiers in the same name space can be redefined within enclosed program blocks.

Within each of the following four name spaces, the identifiers must be unique.

- Tags of these types must be unique within a single scope:
  - Enumerations
  - Structures and unions
- Members of structures and unions must be unique within a single structure or union type.
- Statement labels have function scope and must be unique within a function.
- All other ordinary identifiers must be unique within a single scope:
  - Function names
  - Variable names
  - Names of function parameters
  - Enumeration constants
  - typedef names.

Scope of Identifier Visibility