zoukankan      html  css  js  c++  java
  • ISO/IEC 9899:2011 条款6.2.3——标识符的名字空间

    6.2.3 标识符的名字空间


    1、如果一个特定标识符的多个声明在一个翻译单元的任意一点可见,那么语法上下文会区分对不同实体的引用。从而,对于标识符各种不同的类别具有独立的名字空间:

    ——标签名(通过标签声明和使用的语法进行区分);

    ——结构体、联合体以及枚举的类型名(通过关键字structunionenum进行区分);

    ——结构体或联合体的成员;每个结构体或联合体为其成员具有一个独立的名字空间(通过用于访问成员的.或是->操作符的表达式类型进行区分);

    ——所有其它标识符称为普通标识符(声明在普通声明符中或是作为枚举常量)。

    [译者注:比如:

    struct label
    {
        int label;
        
        struct
        {
            int label;
        }lab;
    };
    
    union Label
    {
        int label;
    };
    
    enum LABEL
    {
        LABEL1,
        LABEL2,
        LABEL3
    };
    
    static void FuncTest(void)
    {
        int label = 0;
        int Label = 1;
        int LABEL = 2;
        
        if(label > 0)
            goto label;     // goto后面跟的是标签,因此能与变量label做出区分
        
        struct label lab;
        lab.label = label;
        lab.lab.label = 10;
        
        union Label lab2 = { Label };
        
        enum LABEL lab3 = LABEL3;
        if(lab3 == LABEL)
            puts("OK!");
        
        printf("The answer is: %d
    ", lab.label + lab2.label + lab3);
        
    label:
        
        puts("Complete!");
    }

    在以上代码中,在Apple LLVM 6.1编译器下,在外部定义的结构体、联合与枚举的标签名不能相同。而在FuncTest函数语句块中,对象标识符与结构体、联合体和枚举的标签名是完全可以相同的。另外,跳转标签也可以与普通对象标识符相同。

  • 相关阅读:
    sql server等待类型
    进程死锁运行状态、进程阻塞、死锁监控
    sql server安装教程(2008 R2,图形界面安装/命令提示符安装即静默安装/无人值守安装)
    (3.7)存储引擎--索引的结构与分类
    (3.6)存储引擎--文件与数据的结构
    (3.5)存储引擎--日志
    (3.4)存储引擎--内存
    (3.3)存储引擎--数据读写
    PhoneGap and Titanium
    touch
  • 原文地址:https://www.cnblogs.com/zenny-chen/p/4634416.html
Copyright © 2011-2022 走看看