c语言标识符的名字空间和作用域
2013-01-30 21:34
323 查看
c语言的标识符有4种名字空间:
1. 标号名(label)。
2. 结构,联合和枚举的标记(tag)。
3. 结构和联合的成员。
4. 其他所有的标识符(普通标识符)。
有4种作用域:
1. 文件作用域。
2. 块作用域。
3. 函数作用域。
4. 函数原型作用域。
有一个通用的规则,在同一作用域同一名字空间中,标识符不同名即可。
说明如下:
1. 标号名只限定在函数作用域,即同一个函数内,不出现同名的标号名即可。
2. 结构和联合的成员,只限定在该结构(联合)内部。
3. 其余情况采用前面的通用规则,注意区分作用域的覆盖情况。
如:
上述代码是可以编译通过的,第一个INT是文件作用域内定义的标识符,解析到第二个INT时,它还是文件作用域中定义的INT,是一个类型名。第三个INT是块作用域内定义的变量名。
而下面的代码:
不能编译通过,因为第四个INT其实是块作用域内的变量名,而不是文件作用域内的类型名。
在此块内,第三个INT标识符声明了之后,就覆盖了第一个INT标识符。
1. 标号名(label)。
2. 结构,联合和枚举的标记(tag)。
3. 结构和联合的成员。
4. 其他所有的标识符(普通标识符)。
有4种作用域:
1. 文件作用域。
2. 块作用域。
3. 函数作用域。
4. 函数原型作用域。
有一个通用的规则,在同一作用域同一名字空间中,标识符不同名即可。
说明如下:
1. 标号名只限定在函数作用域,即同一个函数内,不出现同名的标号名即可。
2. 结构和联合的成员,只限定在该结构(联合)内部。
3. 其余情况采用前面的通用规则,注意区分作用域的覆盖情况。
如:
typedef int INT; int main(int argc, char *argv[]) { INT INT = 0; return 0; }
上述代码是可以编译通过的,第一个INT是文件作用域内定义的标识符,解析到第二个INT时,它还是文件作用域中定义的INT,是一个类型名。第三个INT是块作用域内定义的变量名。
而下面的代码:
typedef int INT; int main(int argc, char *argv[]) { INT INT = 0; INT a = 0; return 0; }
不能编译通过,因为第四个INT其实是块作用域内的变量名,而不是文件作用域内的类型名。
在此块内,第三个INT标识符声明了之后,就覆盖了第一个INT标识符。
相关文章推荐
- WEB标准略解(一):DOCTYPE、名字空间、语言编码、样式表等
- Python 之作用域和名字空间
- C和C++中的名字空间和作用域
- C和C++中的名字空间和作用域
- 名字空间的含义及作用
- 第一部分 基本语言 第二章 变量和基本类型(2.3.6名字的作用域)(2.3.7在变量的使用处定义变量)
- 函数 | arguments | rest | 作用域 | let | 名字空间 | apply | map() | reduce() | filter() | 回调函数
- C和C++中的名字空间和作用域
- unit01_C++语言背景介绍 、 第一个C++程序 、 名字空间 、 结构、联合和枚举 、 布尔型与操作符别名
- ISO/IEC 9899:2011 条款6.2.3——标识符的名字空间
- [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
- 3.3.5 - [basic.scope.namespace] - 【基本.作用域.名字空间】
- C/C++中的名字空间与作用域示例详解
- 汇编语言中PTR的含义及作用以及Mov和lea的区别
- 静态变量的简单 和 strtok 的使用实现 标识符的作用域
- C语言编程基础-11递归函数变量的生命周期和作用域
- 10. Python开发--函数名称空间与作用域
- 【转】C/C++语言中Static的作用详述
- Java语言基础组成之:关键字、标识符、注释、常量和变量、运算符
- 名字空间