原因

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

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

规范

在开头和结尾应该加上防止多次引用的宏

//headfilie.h
#ifndef _HEADFILE_H_#define _HEADFILE_H_//声明#endif

未初始化的全局变量将会放到elf文件的.bss段中,.bss不占据实际的磁盘空间,只在段表中记录大小,在符号表中记录符号。当文件加载运行时,才分配空间以及初始化。因此可以多次声明。
 

参考博客

  • 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言
  • bss段不占据磁盘空间的理解
  • extern的使用详解(多文件编程)——C语言

使用头文件的原因和规范相关推荐

  1. 函数实现不放在头文件的原因,及何时可以放头文件的情况

    1 .引子        在平常的 C/C++ 开发中,几乎所有的人都已经习惯了把类和函数分离放置,一个 .h 的头文件里放声明,对应的 .c 或者 .cpp 中放实现.从开始接触,到熟练使用,几乎已 ...

  2. 函数实现不放在头文件的原因,及何时可以放头文件的情况【转】

    1 .引子 在平常的 C/C++ 开发中,几乎所有的人都已经习惯了把类和函数分离放置,一个 .h 的头文件里放声明,对应的 .c 或者 .cpp 中放实现.从开始接触,到熟练使用,几乎已经形成了下意识 ...

  3. c++使用多个库的头文件内容里有名字相同问题

    首先说下结构体,如果两个头文件定义的结构体内容不一样,但名字一样,当一个文件同时包含着两个头文件的时候,就会报如下错误: 此时,在不修改头文件的情况下(最好不要改动,不然第三方库可能调用出错),使用命 ...

  4. C语言编程规范 — 头文件、函数

    0 编码规范说明 0.1 前言 为了提高产品或项目代码质量,软件开发人员编写出简洁.可靠.可维护.可测试.高效.可移植的代码,树立良好的编程规范是非常有必要的,良好的编程规范能提高编程效率,规避很多编 ...

  5. 【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )

    文章目录 I . JNI 与 NDK 区别 II . Visual Studio 编译动态库 III. 配置 导入 jni.h 头文件 IV . IntelliJ IDEA Community Edi ...

  6. C/C++ 为什么#ifndef 头文件 要用大写加下划线?(这就是一种约定俗成的规范)

    如图,防止头文件重复包含,为什么要用大写加下划线?为什么不是直接写peripherals.h,我已经在问了 解释: 首先,test.h不是合法的C标识名:合法的C标识名只能由字母.数字和下划线组成,且 ...

  7. javah导出类的头文件抛出异常——java.lang.IllegalArgumentException: Not a valid class name(原因及解决方法)

    [0]README 0.1) 本文旨在给出 java.lang.IllegalArgumentException 异常的原因 和 处理方法, 该异常和 javah 没有半毛钱关系 : 0.2) 本文附 ...

  8. C++ 头文件使用规范建议

    1.背景 拥有良好的编程规范和风格是一名程序员成熟的标志.规范的编码可以减少代码冗余,降低出错率,便于代码管理和代码交流等,事实上,其作用远不止这些,我们要牢记编码规范在心中啊. C++ 具有很多强大 ...

  9. C++:头文件规范/模板

    某个摄像头模块的Demo头文件,学习一下头文件规范 例1. #ifndef __HCAMERA_H__ #define __HCAMERA_H__#define HCAMERA_API extern ...

最新文章

  1. C++实用技巧(二)
  2. 全球及中国仪器润滑剂行业十四五竞争形势与投资战略咨询报告2021-2027年版
  3. malloc,free,new,delete解析(原)
  4. java 查看pdf_Java中实现pdf在线查看和下载
  5. Delphi中字符串比较大小 VS Oracle-SQL中字符串比较大小
  6. php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本
  7. Android N 新特性 + APP开发注意事项
  8. node.js async await 配合Promise对象使用
  9. 如何网络监测其他计算机关闭445端口,关闭445端口的方法,小编告诉你电脑如何关闭445端口-站长资讯中心...
  10. 2018.6.5今天跟着视频做了一个提交Todolist
  11. Harbor 使用 Helm 一键安装
  12. Spring源码系列(十一)——Spring源码总结
  13. gsp计算机管理系的功能,医药系统的GSP管理
  14. Js获取外网IP地址
  15. IOMeter安装以及测试
  16. css实现优惠券的样式
  17. Idea内网配置仓库地址
  18. java基础 day-17 设计模式(单例,工厂,代理),静态动态代理,数据库连接池(动态代理)
  19. HHKB-BT 入门指北
  20. 微信开发者工具如何打开企业微信小程序

热门文章

  1. Windows 10 IoT Core 17101 for Insider 版本更新
  2. 洛谷 P1757 通天之分组背包
  3. 深入理解softmax函数
  4. scala akka通信机制
  5. Oracle使用startup与startup force启动的区别
  6. int main(int argc,char* argv[])讲解
  7. Windows下运行jekyll,编码已不再是问题
  8. 2013.8.7Java语言基础——数组
  9. ORACLE10g R2及PATH官方下载地址
  10. .net中调用exchange服务器发邮件