C 语言的命名空间

C语言也有命名空间,可分位4类命名空间。

4类命名空间:

  1. 所有的标签(label)都属于同一个命名空间。说明:①在同一个函数内,你的标签不能相同。②在同一个函数内,标签可以和其他变量名称相同。因为它们所属的命名空间不同。
  2. structenumunion的名称,在 C99 中称之为 tag,所有的 tag 属于同一个命名空间。也就是说,如果你已经声明struct A { int a }; 就不能再声明union A{ int a };了。
    之所以让所有的 tag 组成一个命名空间,由于 tag 前面总是带structenumunion关键字,所以编译器可以将它们与其他的标识符区分开。
  3. structunion的成员属于一个命名空间,而且是相互独立的。例如:如果你已经声明struct A { int a }; ,其成员的名称为a,你仍然可以声明 struct B{ int a };或者union B{ int a };。之所以让structunion的成员各自成为一个命名空间,是因为它们的成员访问时,需要通过 “.”或”->”运算符,而不会单独使用,所以编译器可以将它们与其他的标识符区分开。由于枚举类型enum的成员可以单独使用,所以枚举类型的成员不在这一名称空间内。
  4. 其他所有的标识符,属于同一个名称空间。包括变量名、函数名、函数参数,宏定义、typedef的类型名、enum的成员 等等。注意:如果标识符出现重名的情况,宏定义会覆盖所有其它标识符,这是因为它在预处理阶段而不是编译阶段处理。除了宏定义之外其它类别的标识符,处理规则是:内层作用域会隐藏掉外层作用域的标识符。

平时写 C 程序从来没有想过 C 语言还有命名空间这事,有什么用呢?在《 C 语言接口与实现》这本神作中,大量使用typedef struct T *T;这种形式(其中T就是struct T *)的用法,遵循一定的约定,利用 C 语言的这种简单的命令规则也可以获得一些好处,使代码更精巧,可读性更好。

更多技术分享:Virbox 技术博客

原文地址:https://www.cnblogs.com/ssprotect/p/11112503.html

时间: 2024-08-30 11:58:57

C 语言的命名空间的相关文章

C语言中命名空间的实现

foobar.h 1 // inclusion guard 2 #ifndef FOOBAR_H_ 3 #define FOOBAR_H_ 4 5 //// long names 6 //int foobar_some_func(int); 7 //void foobar_other_func(); 8 int some_func(int); 9 void other_func(); 10 11 // short names 12 #ifdef NAMESPACE foobar 13 #defi

c++的命名空间

一.C++的命名原则 namespace是指标识符的各种可见范围,c++的所有标识符都被定义在一个名为std的namespace中. 1.<iostream>和<iostream.h>是两个不同的文件,后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h. 因此, 1)当使用<iostream.h>时,相当于在c中调用库函数,使用的

转:C++中命名空间污染注意点 blog.sina.com.cn/s/blog_af68a2c201015pqo.html

一. 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突. 在 C语言中定义了3个层次的作用域,即文件(编译单元).函数和复合语句.C++又引入了类作用域,类是出现在文件内的.在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们. 1.全局变量的作用域是整个程序,在同一作用域中不应有两个或多个同名的实体(enuty),包括变量.函数和类等. 例:如果在文件中定义了两个类,在这两个类中可以有同名的函数.在引用时,为了区

[email&#160;protected]命名空间(转)

转自http://hi.baidu.com/rainysky_2006/blog/item/a490e01fc3de7964f724e4d1.html 本讲基本要求 * 掌握:命名空间的作用及定义:如何使用命名空间.     * 了解:使用早期的函数库 重点.难点     ◆命名空间的作用及定义:如何使用命名空间.     在学习本书前面各章时,读者已经多次看到在程序中用了以下语句: using namespace std:     这就是使用了命名空间std.在本讲中将对它作较详细的介绍. 一

命名空间 - PHP手册笔记

原文:命名空间 - PHP手册笔记 概述 命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念,比如在操作系统中,目录用来将相关文件分组,对于目录中的文件来说,目录就扮演了命名空间的角色.这个原理应用到程序设计领域就是命名空间的概念.PHP 5.3后的版本开始支持命名空间. 定义命名空间 命名空间通过关键字namespace来声明.任何合法的PHP代码都可以包含在命名空间中,但只有类.函数和常量这三种类型受命名空间的影响. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的de

XAML 命名空间和命名空间映射

本主题将介绍大部分 XAML 文件的根元素中存在的 XML/XAML 命名空间 (xmlns) 映射.它还将介绍如何为自定义类型和程序集生成类似的映射. XAML 命名空间如何与代码定义和类型库相关 无论是其一般用途还是 Windows 运行时应用编程的应用上,XAML 都用于声明对象.这些对象的属性以及表示为层次结构的对象-属性关系.你在 XAML 中声明的对象受其他编程技术和语言定义的类型库或其他表示支持.这些库可能是: Windows 运行时的内置对象集合.这是一个固定的对象集合,从 XA

webform开发基础

客户端与网页端: C/S(客户端): 两种方式:winform     WPF 数据是存在其它的电脑上或服务器上 需要从服务器上下载相应的数据,在本地电脑上的客户端里进行加工 数据加工的过程是在用户电脑上执行,会对用户的电脑配置有所要求 B/S(网页端): ASP.NET 两种方式: WebForm     MVC 用户发送一个请求到IIS服务器,由服务器将所有的代码执行,服务器会将执行完毕后的html结果给你发送回来 浏览器将发送回来的HTML代码解析呈现给你 传统的ASP开发方式,是C#代码

JavaScript高级程序设计(第三版)学习笔记11、12、17章

第11章, DOM扩展 选择符 API Selector API Level1核心方法querySelector .querySelectorAll,兼容的浏览器可以使用 Document,Element 实例调用它们,支持浏览器:IE8+,Firefox3.5+,Safari3.1+,chrome,Opera10+ querySelector方法 接收一个 CSS选择符,返回与该模式匹配的第一个元素 通过 Document类型调用该函数,会在文档范围查找匹配元素,通过 Element类型调用该

WPF之旅(二)- XAML

什么是XAML XAML(Extensible Application Markup Lanaguage的简写,发音“zammel”)是用于实例化.NET对象的标记语言.尽管XAML是一种可以用于诸多不同问题领域的技术,但其主要作用是构造WPF用户界面.换言之,XAML文档定义了在WPF应用程序中组成窗口的面板.按钮以及各种控件的布局. WPF之前的图形用户设计界面存在的问题 1. 每个图形元素(背景和按钮等)需要导出为单独的位图.这限制了组合位图的能力和使用动态效果的能力,如反锯齿.透明和阴影