<P> For example, in the following code, the a in the macro is resolved (after expansion) to the local variable at the expansion site: </P> <P> As we have seen, one of the key reasons for scope is that it helps prevent name collisions, by allowing identical identifiers to refer to distinct things, with the restriction that the identifiers must have separate scopes . Sometimes this restriction is inconvenient; when many different things need to be accessible throughout a program, they generally all need identifiers with global scope, so different techniques are required to avoid name collisions . </P> <P> To address this, many languages offer mechanisms for organizing global identifiers . The details of these mechanisms, and the terms used, depend on the language; but the general idea is that a group of identifiers can itself be given a name--a prefix--and, when necessary, an entity can be referred to by a qualified identifier consisting of the identifier plus the prefix . Normally such identifiers will have, in a sense, two sets of scopes: a scope (usually the global scope) in which the qualified identifier is visible, and one or more narrower scopes in which the unqualified identifier (without the prefix) is visible as well . And normally these groups can themselves be organized into groups; that is, they can be nested . </P> <P> Although many languages support this concept, the details vary greatly . Some languages have mechanisms, such as namespaces in C++ and C#, that serve almost exclusively to enable global identifiers to be organized into groups . Other languages have mechanisms, such as packages in Ada and structures in Standard ML, that combine this with the additional purpose of allowing some identifiers to be visible only to other members of their group . And object - oriented languages often allow classes or singleton objects to fulfill this purpose (whether or not they also have a mechanism for which this is the primary purpose). Furthermore, languages often meld these approaches; for example, Perl's packages are largely similar to C + +'s namespaces, but optionally double as classes for object - oriented programming; and Java organizes its variables and functions into classes, but then organizes those classes into Ada - like packages . </P>

Which of the following defines the scope of a system