C语言中的符号隐藏:

我们知道,在C语言中,在.c文件中定义一个全局的变量,如果要在其他.c文件中访问,我们需要使用到extern,声明这个变量是引用的其他源文件中的变量,编译器在进行符号整理后,会给该符号一个正确的地址。

当我们希望仅仅在当前文件访问一个符号(无论是函数还是变量),不希望其他源文件访问,也就是隐藏符号,我们可以使用static进行修饰。由于被static修饰的符号是local类型的,编译器不连接local符号,只处理globall符号。

// example.cstatic int a = 100; //localint b = 100;       //globalint sum1(int c,int d)        //global 全局符号
{//...
}static int sum2(int e,int f)  //local 内部符号
{//...
}

Modular C风格的设计最基本的就是将状态(全局变量)和无需暴露的函数通过static隐藏到编译单元内部,只将真正的API接口声明到头文件中。所以,我们应该尽可能多的使用static来修饰函数或者全局变量,这是一个好的编程习惯。

C++中的符号隐藏

访问限定符

从C语言转到面向对象的C++中,第一感觉是多了类,而类提供了public,protected,private三种访问限定符,其中public是开放的,谁都可以访问,protected多用于继承体系中,旨在子类能够访问,private表示私有的,除了自己,谁都不能访问。

我们应该尽可能少暴露符号,所以,设计类的时候,能多用private,就使用private。

当然,访问限定符并不是用来隐藏符号的,隐藏符号可以使用匿名空间。

匿名空间

熟悉C++的同学都知道,为了避免名字重复,引起编译等错误,我们一般要求使用名字空间将我们的类或者方法包裹起来:

// example.hnamespace util
{class File
{//...
};
}

但是这样,外部还是很容易的访问到类File,比如util::File的方式。

C++提供了匿名空间,功能上类型C中的static,被匿名空间包裹的符号,不能被导出,也就是不能在其他源文件中访问
代码看起来更加的干净舒服

//exmple.ppnamespace
{int Count = 0;struct Test{//...}
}int fun()
{if(Count > 0){//dosomething}else{++Count;}Test t;//...
}

总结:

  1. C语言中能使用static尽可能使用static,避免使用extern;
  2. 能使用private尽量使用private;(不影响后续扩展的前提);
  3. 将类的静态私有成员转移到实现文件的匿名命名空间中;
  4. 在某些情况下,可以将类的私有方法重构成类的静态私有方法,然后移入到实现文件的匿名命名空间中;
  5. 对于某些严重的头文件耦合问题,可以选择使用PIMPL方法,隐藏类的所有非公开成员及其依赖的头文件。

C与C++中的符号隐藏相关推荐

  1. (3.1)【多媒体中的数据隐藏】数字音频中的数据隐藏、原理、音频隐写工具 S-TOOLS、提取工具MP3Stego

    目录 一.多媒体简介 1.1.流行: 1.2.隐患: 二. 数字音频中的数据隐藏 2.1.简介: 2.2.原理: 三.简单音频文件嵌入技术(不可感知的方法) 3.1.历史: 3.2.原理: 3.3.  ...

  2. html中输入 符号,HTML中特殊符号

    C#中的@符号用法 C#中的@符号其实有很多的用法,我们来看看@有什么神奇之处. 1.限定字符串 用 @ 符号加在字符串前面表示其中的转义字符"不"被处理. 如果我们写一个文件的路 ...

  3. 2.23怎么在OrCAD原理图中显示与隐藏元器件的Value值?【OrCAD原理图封装库50问解析】

    笔者电子信息专业硕士毕业,获得过多次电子设计大赛.大学生智能车.数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究.对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验,共同 ...

  4. c语言全局变量符号,C语言中的 @ 符号是什么意思?

    标签:assign   inter   res   ted   访问内存   变量   出现   read_only   his Global Variable Address Modifier (@ ...

  5. alt+数字 符号大全_【BIM工具箱】Revit中特殊符号大全和输入技巧

    Revit在出图或创建族文件的过程中,经常需要输入一些特殊符号(比如:角度.正负号.立方.平方等),很多人不知道要如何输入这些符号.这些符号可以通过键盘上的AIT键+数字小键盘实现,按住键盘ALT按键 ...

  6. Linux的nm查看动态和静态库中的符号

    功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...

  7. Lodop中特殊符号¥打印设计和预览不同

    Lodop中¥符号样式改变问题 Lodop中对超文本样式的解析,虽然说是按照调用的本机ie引擎,但是调用的ie版本可能不同,导致在ie下是一种样式,预览又是另一种样式.可能是有些样式没有具体设置,走的 ...

  8. Android中状态栏的隐藏

    Android中状态栏的隐藏 系统中状态栏的隐藏 定制系统的时候,想去掉系统中的状态栏,系统中的状态栏隐藏的可在framework中的SystemUI.apk中修改实现. SystemUI.apk代码 ...

  9. python中的@符号的作用

    python中的@符号的作用_weixin_34014555的博客-CSDN博客 Python中的" @"(@)符号有什么作用?_p15097962069的博客-CSDN博客

  10. 如何在ChemDraw中打出符号π

    很多人日常使用ChemDraw是一款非常优秀的化学绘图软件,在其绘制化学结构式或者反应式的过程中,常常需要添加各种符号.比如有的用户会需要输入希腊字符π,但是不知道用什么方法添加.本教程就来给大家介绍 ...

最新文章

  1. Kaggle Days首次落地中国,日本团队拿下冠军
  2. Oracle database 11g 安装 - 配置企业管理器database control失败
  3. 创业的和想拿高薪的朋友可以看看,企业安全进行云平台运营的5个关键因素
  4. k8s:pod容器的生命周期之init容器
  5. WordPress博客后台不能显示所有主题和无法编辑主题的问题的解决方法
  6. 绑定任意格式的XML文档到WPF的TreeView
  7. 河南双轨制直销系统开发推荐奖介绍
  8. 机器人端的图形界面ssh远程显示方案
  9. 为出海掘金创造更多可能 助力开发者触达全球用户
  10. 传奇泡点地图制作脚本
  11. 省市区areacode反查的精简写法
  12. 大华sdk(java)上传人脸图片到人脸库,订阅人脸识别对比
  13. 保千里智联宝机器人图_保千里打令小宝机器人落地机器人+ 新模式
  14. 果汁机器人传销_独家调查|“洋果汁治百病”?然健环球涉嫌传销大起底
  15. VUE项目(仿商城)
  16. java里 输出101-150中的素数
  17. WAV文件格式解析及处理
  18. 静态库与动态库的区别
  19. c语言中预处理都有哪些类型,c语言中预处理命令都有哪些
  20. 微信小程序大转盘完整代码

热门文章

  1. @property的使用
  2. AMD64(x86_64)架构abi文档:中
  3. 2021年特种设备安全管理(全国特种设备安全管理人员模拟考试题库一)安考星
  4. 18. C语言 -- 指针数组和数组指针
  5. 西安华为 java研发工程师_【华为西安研究所工资】研发工程师待遇-看准网
  6. url %E4%BD%A0%E5%A5%BD 编码问题
  7. win10 启动后无法正常显示桌面/黑屏
  8. 世界各国电压频率和电源插头规格对照表
  9. 谁说小米手机拍照差?开启这3个模式,瞬间拍出单反的效果
  10. 用u盘装linux系统黑屏,u盘启动黑屏 u盘装系统启动不了黑屏咋办