C语言中头文件的使用
标准头文件写法
先了解一下什么是条件编译
//条件编译结构
#if 0或1
//代码块
#endif
那如何使用呢?
#if 1 //值为1则编译框中代码
int main(int argc, const char *argv[])
{return 0;
}
#endif
#if 0 //值为0则不编译
int main(int argc, const char *argv[])
{return 0;
}
#endif
好了,了解了这个之后,看一下写好的头文件
#ifndef _FUN_H
#define _FUN_Hint fun(int a);#endif
让我们来阅读一下这个头文件
#ifndef _FUN_H
这一句可以理解为 if no define 类似于以上条件编译的效果 ,加了一个if的判断
#define _FUN_H
这一句就是简单的宏定义,定义了一个 _FUN_H
简单来说
这两句的效果就是在进入fun.h文件后
如果未定义_FUN_H,就进入文件定义_FUN_H
如果定义了_FUN_C,就直接跳出
执行过程如下:
在同时执行多个文件时
第一个文件执行到#include"fun.h"时,进入fun.h文件,
没有检测到定义了_FUN_N,便进入文件开始运行
第二个文件执行到#include"fun.h"时,进入fun.h文件,
检测到定义了_FUN_N,便直接跳出
第三个文件执行到#include"fun.h"时,进入fun.h文件,
检测到定义了_FUN_N,便直接跳出
如此循环到所有文件运行结束
这样可以避免多个文件每一次运行到
#include"fun.h"
时就对fun.h文件进行一次全部编译,可以节省大量编译时间
头文件的格式如下
#ifndef _FUN_H
#define _FUN_H
//宏定义
define N 10
define M 20
..........//函数声明
int a();
void b();
........#endif
拿以下文件举例
文件名4.c,功能是将255的二进制数中第二位到第七位全部置为0
文件名5.c,功能是将1234的千位、百位、十位分别取出并打印
文件名fun.c,头文件,用来声明4.c中的int fun()函数
如下为打印结果:
首先使用 ls 命令查看目录下所有文件
gcc编译文件夹下所有文件
执行编译出的二进制文件
最后再次 ls 查看所有文件
可以看到,在编译之后除了生成的二进制执行文件 ./a.out
还多了一个 fun.h.gch
这个应该就是在执行fun.h文件之后生成的
我们将生成的 a.out 和 fun.h.gch 文件删除
只对4.c和5.c文件编译
可以看到依然会生成 a.out 文件,
但是没有 fun.h.gch 文件了
也就验证了以上猜想
本文使用的代码如下
4.c
#include<stdio.h>
#include"fun.h"
int fun(int argc)
{int a = 255;int i,b;printf("before a=%d\n",a);for(i=2;i<=7;i++){a = a &(~ (1<<i));}return 0;
}
5.c
#include<stdio.h>
#include"fun.h"int main(int argc, const char *argv[])
{int a = 1234;int b = a /1000;int c = a %1000 /100;int d = a %100 /10;printf("十位是%d\n百位是%d\n千位是%d\n",d,c,b);fun(a);return 0;
}
fun.h
#ifndef _FUN_H
#define _FUN_Hint fun(int a);#endif
最后,感谢对本文的阅读,今后也会分享更多编程遇到的问题和学到的知识
努力,加油!
C语言中头文件的使用相关推荐
- C语言中头文件和源文件的注意事项
C语言中头文件和源文件的注意事项 文章目录 C语言中头文件和源文件的注意事项 0.前言 1.实现步骤 1.1 拆分前 1.2 拆分后 2.总结 2.1头文件内容 2.2 源文件(.c)内容 2.3 函 ...
- C语言中头文件怎么写?(本文来源网络,由黑乌鸦进一步完善)
c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码.有利于整理思路.使代码脉络更加 ...
- C语言中头文件包含的处理原则
很多事不深入以为自己懂了,但真正用到项目上,才发现了问题.曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的.(毕竟刚毕业时老大对我最初的训练就是 ...
- 详解C语言中头文件的作用
大家好,先做个自我介绍,我是天蓬,欢迎阅读本篇博文. 由于本人理解能力不是很好,阅读他人文章时,常常看得晕头晕脑,这让我很是头疼,我想,世界上一定还有和我一样的人(哈哈,不是说你么笨哦).所以,我将会 ...
- C语言中头文件和源文件的关系
答案 #include预处理实际上就是完成了一个"复制代码并插入"的工作! 编译器工作阶段 1.预处理 2.词法和语法分析 3.编译(高级语言--汇编语言--二进制码--目标文件. ...
- c语言中ndigit用法,求C语言中头文件及函数的含意的总分类
ALLOC.H 说明内存管理函数(分配.释放等). ASSERT.H 定义 assert调试宏. BIOS.H 说明调用IBM-PC ROM BIOS子程序的各个函数. CONIO. H 说明调用DO ...
- c语言中错误为ffblk未定义,C语言中头文件及函数的含意的总分类
ALLOC.H 说明内存管理函数(分配.释放等). ASSERT.H 定义assert调试宏. BIOS.H 说明调用IBM-PC ROM BIOS子程序的各个函数. CONIO.H 说明调用DOS控 ...
- 在c语言中怎么返回引用参数,C语言函数 函数的声明 C语言的头文件 #include的用法 形参和实参 函数的返回值 - 猫扑天空...
C语言函数 一.是什么? 是指编程中对一块功能代码的封装,可以理解一个程序片段 二.有什么用? 可以封装代码,方便调用,提高复用性 三.怎么用? 定义: 返回值类型 函数名(形参类型 参数名1-. ...
- c语言头文件可以定义全局变量,C语言在头文件中定义全局变量
C语言在头文件中定义全局变量 头文件定义全局变量等问题 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量.头文件中不可以直接定 ...
最新文章
- 科普丨深度学习硬件(GPU、FPGA、ASIC、DSP)
- mysql8.11安装_MySQL-mysql 8.0.11安装教程
- EMD算法之Hilbert-Huang Transform原理详解和案例分析
- 升级bigsur_升级 macOS Big Sur 后,程序监听端口报错
- USACO2.4のP1519-穿越栅栏(Overfencing)【bfs】
- Web Broadcast Channel
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(8) - 杂项指令 用户态扩展状态指令 随机数生成指令
- Oracle存储过程介绍
- 11 JVM 垃圾回收(上)
- C# 值类型和引用类型 以及作为方法参数的区别
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)...
- Smarty下载和安装
- 【语音识别】日语语音识别系统Julius(v4.4)的基于DNN的识别(5月8号:识别结果更新)
- 《刻意练习》读书分享
- Dede文章标题及文章摘要长度修改_元曦血狼_新浪博客
- 推荐书单——不定时更新
- 安卓上通过pydorid 3来使用jupyter notebook(鸿蒙/华为/安卓手机/平板进行python编程学习)
- 如何设置Foxmail收取yahoo.com.cn和yahoo.cn以及yahoo.com等邮箱的方法
- requireJS常用用法
- lv双肩包尺寸对照表_lv双肩包mini尺寸对照表
热门文章
- 新能源汽车赛道王者争霸战,盛世昊通携国澳新能源入局充电桩事业
- 芭比linux安装硬盘,可爱的小芭比……Debian下为移动硬盘装上puppy(使用GRUB引导)...
- Armbian 笔记六_使用 armbian-ddbr 命令 备份/还原 eMMC 系统
- 阿里mysql连接_[转]解决阿里云mysql不能连接,配置mysql远程连接
- intel E810 100G网卡iperf测试
- 2019苏州计算机一级考试时间,2019年上半年江苏省苏州市计算机等级考试简章
- 美国次级房贷风波蔓延 全球爆发小型金融危机
- 各种正则校验规则:校验用户名正则,校验手机号,校验中文姓名,校验英文姓名,校验数字,校验银行卡,校验身份证号码,校验时间格式,校验 email(邮箱)
- 共享的计算机用户账户限制,win7不能访问共享文件夹用户账户限制如何解决
- 优秀的windows软件推荐(内存整理和文件解除占用)