C++/C的文件结构
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的文件结构相关推荐
- android 定义集合长度,Android Dex文件结构解析
Java源文件通过Java编译器生成CLASS文件,再通过dx工具转换为classes.dex文件. DEX文件从整体上来看是一个索引的结构,类名.方法名.字段名等信息都存储在常量池中,这样能够充分减 ...
- 1 字节的 utf-8 序列的字节 1 无效_字节码文件结构详解
点击上方" Java资料站 ",选择"标星公众号" 优质文章,第一时间送达 陈建源 | 作者 urlify.cn/INFrUr | 来源 "一 ...
- Nginx入门笔记之————配置文件结构
在nginx.conf的注释符号位# nginx文件的结构,这个对刚入门的同学,可以多看两眼. 默认的config: #user nobody; worker_processes 1;#error_l ...
- Class类文件结构、类加载机制以及字节码执行
一.Class类文件结构 Class类文件严格按照顺序紧凑的排列,由无符号数和表构成,表是由多个无符号数或其他数据项构成的符合数据结构. Class类文件格式按如下顺序排列: 类型 名称 数量 u4 ...
- 深入理解java虚拟机之类文件结构以及加载
我们都知道,java是一种平台无关的语言.java代码通过java编译器(如javac等),将.java文件编译成字节码,也就是.class文件.字节码是运行在jvm虚拟机之上的.而不同的平台则 有不 ...
- 修改class文件_VM实战(六) - 通过案例深入学习class文件结构原理
0 更多干货关注 JavaEdge 公众号 1 什么是JVM的"无关性"? Java具有平台无关性,也就是任何操作系统都能运行Java代码.之所以能实现这一点,是因为Java运行在 ...
- nginx模型概念和配置文件结构
一. nginx模型概念: Nginx会按需同时运行多个进程: 一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程( ...
- Xamarin XAML语言教程XAML文件结构与解析XAML
Xamarin XAML语言教程XAML文件结构与解析XAML XAML文件结构 在上文中,我们创建XAML文件后,会看到类似图1.16所示的结构 图1.16 结构 其中,.xaml文件和.xaml ...
- Python 基础语法_Python脚本文件结构
目录 目录 前言 软件环境 Python Script文件结构 导入模块的流程 Python的包package 最后 前言 Python基础语法这一章,主要记录了Python的文件结构.逻辑运算符.算 ...
最新文章
- 赴约北大,2019 CCF大数据与计算智能大赛正式启动
- 面向对象的一个实例 (银行管理系统)
- matlab子函数调用变量,matlab中,怎么样用function自定义函数调用另一个函数名为输入?...
- Oracle 加密配置,Oracle sqlnet设置网络传输加密
- java报错空指针异常_夯实基础:认识一下这10 个深恶痛绝的 Java 异常
- 谷歌浏览器外贸版_外贸 网站移动端优化 浅析
- sklearn中的Linear_model的score函数讲解
- ArcGIS 9在WIN XP 和 WIN 2003 系统下安装部分动态库不能注册
- db2 删除索引_程序员必须了解的知识点——你搞懂mysql索引机制了吗?
- (CMA-ES源码)协方差自适应进化策略(Covariance Matrix Adaptation Evolution Strategy,CMA-ES)——最好的单目标进化算法?
- 【eclipse】启动不了报错java was started but returned exit code=13
- Pycharm 主题背景色的配置
- pdf复制到word有空格间隙和换行问题解决办法
- AI人工智能、机器学习 面试题(2022最新版)
- 马化腾教你做产品:改掉这七点,让产品自己说话
- python通信技术_一起学Python:网络通信过程
- 打印等腰三角形图案[1]
- python3基础知识复习 --TKinter GUI的终极选择(2)
- 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 总共多少步
- springboot 东方通(tongweb)替换tomcat
热门文章
- 使用ISDN和DDR技术改善远程连接性能
- Kali Linux发布2020.1a版本
- Unity2D游戏开发基础教程1.2 项目、资源和场景
- pmp matlab 代码,【welch功率谱估计】C语言实现的代码与matlab计算结果不同
- python开发效率最高_公认8个效率最高的爬虫框架
- 在单链表写入一组数据代码_链表常见操作和15道常见面试题
- 解决电脑重启后 ubuntu 不能联网
- android 开启一个定时线程_Android异步、延迟和定时任务的简易用法
- 暨南大学击败清华,首次夺得ASC世界大学生超算竞赛冠军
- 2019年Reddit机器学习板块17个最佳项目:最新代码、资源应有尽有