2016-05-20 8 views
1

Der C-Standard sagt:Was sind Tag-Namensräume?

7.1.3 Reservierte Bezeichner
Alle Kennungen, die mit einem Unterstrich beginnen, sind für die Verwendung als Bezeichner mit Dateiumfang immer reserviert sowohl in den gewöhnlichen und Tag Namensräume.

Was sind "Tag-Namensräume"?

Ist das Folgende ein markierter Namensraum?

struct T{}; 

Ist es nur der Typname einer Struktur?
Wird diese Terminologie in C++ übernommen?

+1

http://en.cppreference.com/ w/c/language/name_space – mindriot

+1

6.2.3 spricht über "tag name spaces" – user6362820

+2

Dies sind 'gewöhnliche' Namespace und 'Tag-Name' Namespace (die T in Struktur T {} ist ein 'Tag-Name'). C++ hat keine 'Tag-Namen'. –

Antwort

5

Von cppreference:

C ermöglicht mehr als eine Erklärung für die gleiche Kennung in ihrem Umfang zu sein, gleichzeitig, wenn diese Kennungen zu verschiedenen Kategorien gehören, die so genannte Namensräume:

  1. Label-Name Raum: alle Bezeichner, die als Label deklariert sind.
  2. Tag-Namen: Alle Bezeichner, die als Namen von Strukturen, Vereinigungen und Aufzählungstypen deklariert sind. Beachten Sie, dass alle drei Arten von Tags einen Namensraum teilen.
  3. Mitgliedsnamen: Alle Bezeichner, die als Mitglieder einer beliebigen Struktur oder Union deklariert sind. Jede Struktur und Union führt einen eigenen Namensraum dieser Art ein.
  4. Alle anderen Bezeichner, sogenannte gewöhnliche Bezeichner zur Unterscheidung von (1-3) (Funktionsnamen, Objektnamen, Typdef-Namen, Aufzählungskonstanten).

So T ist der Name einer Struktur und im gleichen Namensraum wie die anderen „Tags“, aber nicht im gleichen Namensraum wie etwa Etikett. Das heißt, Sie könnten ein Label mit dem Namen T im selben Umfang haben.

2

Geht diese Terminologie in C++ über?

Nein "Tag-Name" nicht außer für C++ and ISO C im informativen Anhang in dem C++ Standard erwähnt, wo Tag-Namen im Zusammenhang mit C. diskutiert