C语言:头文件
2023-02-18 16:40:15 时间
这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开
如何学好一门编程语言
- 掌握基础知识,为将来进一步学习打下良好的基础。
- 上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
- 养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了
头文件
头文件是扩展名为 .h 的文件,包含了函数声明和宏定义,能够被其他源文件(***.c)引用,一般使用 #include ***.h 来引用头文件。
引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。
优秀程序员的习惯:
将 全局变量、宏定义、函数声明 和 宏定义 放在.h文件中
将 函数定义 和 算法逻辑 放在.c文件中
头文件有两种类型:
- 用户的头文件: #include "file" // 导入用户头文件
- 编译器头文件: #include <file> // 导入系统头文件
引用头文件的操作
如果您有一个头文件 header.h 和程序 program.c,如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
char *test (void);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int x; #include "header.h" int main (void) { puts (test ()); }
编译器会看到如下代码信息:
int x; char *test (void); int main (void){ puts (test ()); }
如果一个头文件被引用两次,编译器会处理两次头文件的内容,这将产生错误。为了防止这种情况,标准的做法是把文件的整个内容放在条件编译语句中,如下:
#ifndef HEADER_FILE // 如果没有初始化 HEADER_FILE #define HEADER_FILE #endif
配合#if预处理指令来导入头文件
#if SYSTEM_1 # include "system_1.h" #elif SYSTEM_2 # include "system_2.h" #elif SYSTEM_3 ... #endif
但是如果头文件比较多的时候,这么做是很不妥当的,预处理器使用宏来定义头文件的名称,我们可以导入宏名称 来代替:
#define SYSTEM_H "system_1.h" ... #include SYSTEM_H
SYSTEM_H 会扩展,预处理器会查找 system_1.h,就像 #include 最初编写的那样。SYSTEM_H 可通过 -D 选项被您的 Makefile 定义。
在有多个 .h 文件和多个 .c 文件的时候,往往我们会用一个 global.h 的头文件来包括所有的 .h 文件,然后在除 global.h 文件外的头文件中 包含 global.h 就可以实现所有头文件的包含,同时不会乱。方便在各个文件里面调用其他文件的函数或者变量。
#ifndef _GLOBAL_H #define _GLOBAL_H #include <fstream> #include <iostream> #include <math.h> #include <Config.h>
参考
相关文章
- 字节后端实习一面凉经
- 面向接口编程的好处-介绍API数据接口的好处!
- C语言大学生考试全面题库
- 数据治理很抽象吗
- Elasticsearch互联网主流分布式全文检索框架实战-ElasticStack(上)v7.14.0
- 分布式全局ID生成器原理剖析及非常齐全开源方案应用示例
- ElasticJob分布式任务调度应用v2.5.2
- 云原生概念你了解多少
- 主流微服务一站式解决方案Spring Cloud Alibaba入门看这篇就足够了-开篇v2.2.1.RELEASE
- Pulsar云原生分布式消息和流平台v2.8.0
- 回顾2022,展望2023,一个普通98年程序员的自述和分享
- SpringBoot+Mybatis-plus整合easyExcel批量导入Excel到数据库+导出Excel
- Springboot整合策略模式概念->使用场景->优缺点->企业级实战
- 三台服务器使用docker搭建redis一主二从三哨兵,概念-搭建-整合springboot
- IDEA中给源码添加自己注释——private-notes插件安装使用
- docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES
- Spark简单介绍,Windows下安装Scala+Hadoop+Spark运行环境,集成到IDEA中
- SpringBoot自定义注解+异步+观察者模式实现业务日志保存
- 还在使用@Autowrired注入?不妨试试@RequiredArgsConstructor
- 后端统一处理返回前端日期LocalDateTime格式化去T,Long返回前端损失精度问题