5

タイプが定義されているCのさまざまな名前空間についてSOで読んだことがあります。たとえば、StructsとUnionの名前空間とtypedefの名前空間があります。

名前空間はこれの正確な名前ですか? C にはいくつの名前空間が存在しますか?

4

2 に答える 2

6

6.2.3 を参照

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdfから

6.2.3 識別子の名前空間

If more than one declaration of a particular identifier is visible at
any point in a translation unit, the syntactic context disambiguates uses
that refer   to different entities.

 Thus, there are separate name spaces for various categories of identifiers,
as follows:
— label names (disambiguated by the syntax of the label declaration and use);

— the tags of structures, unions, and enumerations (disambiguated by 
 following any32) of the keywords struct, union, or enum);

— the members of structures or unions; each structure or union has a 
separate name space for its members (disambiguated by the type of the 
expression used to access themember via the . or -> operator);

— all other identifiers, called ordinary identifiers (declared in ordinary 
  declarators or as enumeration constants).
于 2012-09-25T08:56:46.863 に答える
2

ここで「名前空間」という言葉が正しいかどうかはわかりませんが、あなたの言いたいことはわかると思います。

できるよ

union name1 { int i; char c; };
struct name2 { int i; char c; };
enum name3 { A, B, C };
typedef int name4;
int name5;

ここname1name2およびname3は、互いに衝突しないため、別個の「名前空間」にあります (この言葉は今のところそのままにしておきます)。

これは、それらを使用するには、それぞれのキーワードを前に付ける必要があることを意味します。

struct name1 var; // valid
name1 var; // invalid

一方、グローバルな「名前空間」に住んでいて衝突しますname4name5したがって、 を持った後typedef int name4;、その名前で変数を定義することはできませんname4

ところで: ラベルも独自の名前空間を定義します。

于 2012-09-25T08:56:42.557 に答える