C++/C的文件结构

对于C++/C的程序开发员来说,文件结构这一内容是很重要的一块,我们知道,每个C++/C程序通常分为两个文件。一个为头文件,用于保存程序的声明(declaration)。另一个为定义(definition)文件,用于保存程序的实现(implementation)。在编程时若能掌握一些技能是很有帮助的。下面就来讲讲这个编程方面的要点。

C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。

1.版权和版本的声明

版权和版本的声明位于头文件和定义文件的开头(参见示例1-1),主要内容有:

(1)版权信息。

(2)文件名称,标识符,摘要。

(3)当前版本号,作者/修改者,完成日期。

(4)版本历史信息。

示例1-1 版权和版本的声明

2 .头文件的结构

头文件由三部分内容组成:

(1)头文件开头处的版权和版本声明(参见示例1-1)。

(2)预处理块。

(3)函数和类结构声明等。

假设头文件名称为 graphics.h,头文件的结构参见示例1-2。

【规则1-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。

【规则1-2-2】用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。

【规则1-2-3】用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。

【建议1-2-1】头文件中只存放“声明”而不存放“定义”

在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。

【建议1-2-2】不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。

示例1-2 C++/C头文件的结构

3 .定义文件的结构

定义文件有三部分内容:

(1)定义文件开头处的版权和版本声明(参见示例1-1)。

(2)对一些头文件的引用。

(3)程序的实现体(包括数据和代码)。

假设定义文件的名称为 graphics.cpp,定义文件的结构参见示例1-3。

示例1-3 C++/C定义文件的结构

4. 头文件的作用

早期的编程语言如Basic、Fortran没有头文件的概念,C++/C语言的初学者虽然会用使用头文件,但常常不明其理。这里对头文件的作用略作解释:

(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。

(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。

5. 目录结构

如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。

例如可将头文件保存于include目录,将定义文件保存于source目录(可以是多级目录)。

如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。

http://www.cnblogs.com/Goldworm/archive/2012/05/21/2511905.html

转载于:https://blog.51cto.com/2012huhu/1059511

C++/C的文件结构相关推荐

  1. android 定义集合长度,Android Dex文件结构解析

    Java源文件通过Java编译器生成CLASS文件,再通过dx工具转换为classes.dex文件. DEX文件从整体上来看是一个索引的结构,类名.方法名.字段名等信息都存储在常量池中,这样能够充分减 ...

  2. 1 字节的 utf-8 序列的字节 1 无效_字节码文件结构详解

    点击上方" Java资料站 ",选择"标星公众号" 优质文章,第一时间送达 陈建源  |  作者 urlify.cn/INFrUr  |  来源 "一 ...

  3. Nginx入门笔记之————配置文件结构

    在nginx.conf的注释符号位# nginx文件的结构,这个对刚入门的同学,可以多看两眼. 默认的config: #user nobody; worker_processes 1;#error_l ...

  4. Class类文件结构、类加载机制以及字节码执行

    一.Class类文件结构 Class类文件严格按照顺序紧凑的排列,由无符号数和表构成,表是由多个无符号数或其他数据项构成的符合数据结构. Class类文件格式按如下顺序排列: 类型 名称 数量 u4 ...

  5. 深入理解java虚拟机之类文件结构以及加载

    我们都知道,java是一种平台无关的语言.java代码通过java编译器(如javac等),将.java文件编译成字节码,也就是.class文件.字节码是运行在jvm虚拟机之上的.而不同的平台则 有不 ...

  6. 修改class文件_VM实战(六) - 通过案例深入学习class文件结构原理

    0 更多干货关注 JavaEdge 公众号 1 什么是JVM的"无关性"? Java具有平台无关性,也就是任何操作系统都能运行Java代码.之所以能实现这一点,是因为Java运行在 ...

  7. nginx模型概念和配置文件结构

    一. nginx模型概念: Nginx会按需同时运行多个进程: 一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程( ...

  8. Xamarin XAML语言教程XAML文件结构与解析XAML

    Xamarin XAML语言教程XAML文件结构与解析XAML XAML文件结构 在上文中,我们创建XAML文件后,会看到类似图1.16所示的结构 图1.16  结构 其中,.xaml文件和.xaml ...

  9. Python 基础语法_Python脚本文件结构

    目录 目录 前言 软件环境 Python Script文件结构 导入模块的流程 Python的包package 最后 前言 Python基础语法这一章,主要记录了Python的文件结构.逻辑运算符.算 ...

最新文章

  1. 赴约北大,2019 CCF大数据与计算智能大赛正式启动
  2. 面向对象的一个实例 (银行管理系统)
  3. matlab子函数调用变量,matlab中,怎么样用function自定义函数调用另一个函数名为输入?...
  4. Oracle 加密配置,Oracle sqlnet设置网络传输加密
  5. java报错空指针异常_夯实基础:认识一下这10 个深恶痛绝的 Java 异常
  6. 谷歌浏览器外贸版_外贸 网站移动端优化 浅析
  7. sklearn中的Linear_model的score函数讲解
  8. ArcGIS 9在WIN XP 和 WIN 2003 系统下安装部分动态库不能注册
  9. db2 删除索引_程序员必须了解的知识点——你搞懂mysql索引机制了吗?
  10. (CMA-ES源码)协方差自适应进化策略(Covariance Matrix Adaptation Evolution Strategy,CMA-ES)——最好的单目标进化算法?
  11. 【eclipse】启动不了报错java was started but returned exit code=13
  12. Pycharm 主题背景色的配置
  13. pdf复制到word有空格间隙和换行问题解决办法
  14. AI人工智能、机器学习 面试题(2022最新版)
  15. 马化腾教你做产品:改掉这七点,让产品自己说话
  16. python通信技术_一起学Python:网络通信过程
  17. 打印等腰三角形图案[1]
  18. python3基础知识复习 --TKinter GUI的终极选择(2)
  19. 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 总共多少步
  20. springboot 东方通(tongweb)替换tomcat

热门文章

  1. 使用ISDN和DDR技术改善远程连接性能
  2. Kali Linux发布2020.1a版本
  3. Unity2D游戏开发基础教程1.2 项目、资源和场景
  4. pmp matlab 代码,【welch功率谱估计】C语言实现的代码与matlab计算结果不同
  5. python开发效率最高_公认8个效率最高的爬虫框架
  6. 在单链表写入一组数据代码_链表常见操作和15道常见面试题
  7. 解决电脑重启后 ubuntu 不能联网
  8. android 开启一个定时线程_Android异步、延迟和定时任务的简易用法
  9. 暨南大学击败清华,首次夺得ASC世界大学生超算竞赛冠军
  10. 2019年Reddit机器学习板块17个最佳项目:最新代码、资源应有尽有