【C语言基础】源文件与头文件详解

news2024/9/27 5:50:44

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • 源文件的概念
  • 头文件的概念
  • 头文件的作用
  • <>和""之间的区别
  • 程序编写规范


源文件的概念

C语言中源文件的概念:

源文件即源代码所在文件。C语言的源文件的后缀名是.c,因此只要以.c为后缀名的文件都是C语言的源文件。

头文件的概念

什么是头文件?

使用#include引入的文件,以.h为后缀名的文件。

一般地,在C语言或C++中,会把用来#include的文件的扩展名叫.h,称其为头文件。#include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。
在现行的c版本中,应用这个头文件应是#include<stdio.h>。

头文件的作用

1、声明函数和变量
头文件主要用于提供函数和变量的声明,以供其他源代码文件引用和使用。头文件中可以包含函数和变量的声明、结构体的定义、宏定义以及其他需要在不同源文件之间共享的元素。其他源代码文件可以通过包含(include)头文件来访问其中声明的函数和变量,从而可以在自己的代码中使用这些函数和变量,而无需重新编写它们的定义。

2、实现模块化
头文件的目的是为了实现模块化、代码重用和减少重复编写的目标,通过将常用的函数和变量的声明放在头文件中,可以方便地在多个源文件中引用和共享。同时,头文件也可以提供接口的声明,方便其他开发人员了解和使用代码库或模块。

3、避免多重复定义
头文件中通常只包含声明而不包含实现(具体的代码逻辑),实现应该放在对应的源代码文件中。这样可以避免在多个源文件中重复定义同一个函数或变量,从而引发多重定义的错误。

<>和""之间的区别

两者之间是没有多大差别的,只是为了提高查找效率而区分的。
<>:意为标准头文件

使用<>这种方式,编译器会在编译器安装目录的标准库中开始查找该头文件。
这种方式适用于包含标准库或系统级别的头文件。

例如:
C语言中标准的输入输出头文件是 <stdio.h>。
C++语言中标准的输入输出头文件是< iostream >。

“”:意为自定义头文件

""这种方式,会在当前的工程所在的文件夹,也就是源文件所在的文件夹中开始寻找。

总之,使用 <> 包裹的文件名会首先在默认的系统库路径下查找,而使用 “” 包裹的文件名会首先在当前源文件目录中查找。

程序编写规范

除了程序的入口函数,通常每一个 .c 文件应该有一个相应的同名 .h 文件

1、在 C 语言中,通常情况下每一个 .c 文件会对应一个同名的 .h 文件。这是为了实现模块化和代码组织的目的。头文件(.h 文件)中会包含该模块或代码文件中的函数和变量的声明,供其他源代码文件引用和使用。
同时,与 .h 文件对应的 .c 文件中则包含这些函数和变量的具体实现(定义)。这种分离将函数的声明(接口)和定义(实现)分离开来,可以提高代码的可读性、可维护性和可重用性。

2、然而,并不是每一个 .c 文件都需要一个同名的 .h 文件,这取决于具体的项目和代码组织的方式。有些 .c 文件可能只是包含一些主函数(入口函数),而不涉及额外的函数和变量。这种情况下可能不需要为该 .c 文件编写一个相应的 .h 文件。

3、所以,可以看出这句话并不是绝对的规则,而是一个常见的约定和最佳实践。根据具体的项目需求和代码组织方式,可能会有特殊情况。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/934683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Office Tool Plus 使用与激活

Office Tool Plus 一个强大且实用的 Office 部署工具。 可以免费激活使用office各种版本 体验了一下&#xff0c;觉得很不错&#xff0c;我介绍一下我使用的方式&#xff1a; 1.安装软件 访问官网&#xff1a;Office Tool Plus 选择ZIP的包&#xff0c;下载后解压&#xff0c…

Huggingface托管机器学习模型及API提供

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 我想在我的网络和移动应用程序中使用机器学习模型&#xff0c;但要做到这一点&#xff0c;我必须在某个地方托管我的机器学习应用程序。 托管预先训练的 ML 模型称为推理。 我只想添加一些 Python ML 代码并快速获得 REST…

一段简单的汇编语言源程序【2】

此文章主要记录代码的编写&#xff0c;编译&#xff0c;连接&#xff0c;调试过程&#xff0c;相关工具的安装和使用介绍在前面的文章中已提供。 主要功能通过栈实现两个数的交换 源代码如下&#xff1a; assume cs:codesg codesg segmentmov ax,2000Hmov ss,axmov sp,0add s…

国产发力,长存入局|相变存储器PCM是SCM的未来吗?

在去年7月份有一件震惊存储圈的事情&#xff0c;那就是Intel说要放弃Optane产品线&#xff0c;包括PMEM和SSD两个方向都要放弃。存储圈看到听到这个消息也是一脸的茫然。 在Optane产品发布之前&#xff0c;大家针对DRAM和SSD之间的性能gap一直在苦苦找寻合适的产品。SCM存储级内…

深度学习12:胶囊神经网络

目录 研究动机 CNN的缺陷 逆图形法 胶囊网络优点 胶囊网络缺点 研究内容 胶囊是什么 囊间动态路由算法 整体框架 编码器 损失函数 解码器 传统CNN存在着缺陷&#xff08;下面会详细说明&#xff09;&#xff0c;如何解决CNN的不足&#xff0c;Hinton提出了一种对于图…

一篇掌握BFD技术(二):OSPF与BFD联动配置

1. 实验目的 熟悉OSPF与BFD联动的应用场景掌握OSPF与BFD联动的配置方法 想要华为数通配套实验拓扑和配置笔记的朋友们点赞关注&#xff0c;评论区留下邮箱发给你&#xff01; 2. 实验拓扑 3. 实验步骤 1&#xff09;IP地址的配置 AR1的配置 <Huawei>system-view…

Origin软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Origin是一款专业的科学绘图和数据分析软件&#xff0c;由美国OriginLab公司开发。它提供了丰富的数据分析和绘图工具&#xff0c;适用于各种科学领域&#xff0c;如生物学、化学、物理学、医学、地球科学等。Origin软件的主要特…

使用 S3 生命周期精确管理对象生命周期

在亚马逊工作这些年,我发现 S3 的生命周期配置是管理对象生命周期的重要但复杂的工具。在这篇文章中,我将利用实战经验,深入剖析生命周期,从核心概念到实际应用。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活…

C语言暑假刷题冲刺篇——day5

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练✨相关专栏&#xff1a;代码小游戏、C语言初阶、C语言进阶&#x1f91d;希望作者…

程序的编译链接【编译链接大概步骤】

全文目录 &#x1f600; 前言&#x1f642; 翻译环境和执行环境&#x1f636; 编译和链接&#x1f635;‍&#x1f4ab; 预编译&#xff08;预处理&#xff09;&#x1f635;‍&#x1f4ab; 编译&#x1f635;‍&#x1f4ab; 汇编&#x1f635;‍&#x1f4ab; 链接 &#x1…

数值类特征

数值类特征 数值类特征是最常见的一种特征类型&#xff0c;数值可以直接喂给算法。 为了提升效果&#xff0c;我们需要对数值特征做一些处理&#xff0c;本文介绍了4种常见的处理方式&#xff1a;缺失值处理、二值化、分桶、缩放。 什么是数值类特征&#xff1f; 数值类特征就是…

腾讯云服务器地域和可用区详细介绍_选择攻略

腾讯云服务器地域有什么区别&#xff1f;怎么选择比较好&#xff1f;地域选择就近原则&#xff0c;距离地域越近网络延迟越低&#xff0c;速度越快。关于地域的选择还有很多因素&#xff0c;地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域价格因素…

Redis数据类型全总结【超详细万字总结】

文章目录 前言一、String1、内部实现2、应用场景缓存对象常规计数分布式锁共享 Session 信息 3、常用指令 二、List1、内部实现2、应用场景消息队列List 作为消息队列有什么缺陷 3、常用指令 三、Hash1、内部实现2、应用场景缓存对象购物车 3、常用指令 四、Set1、内部实现2、应…

Linux学习之LNMP环境搭建

LNMP是Linux、Nginx、MySQL和PHP的简称。 Linux参数显示 cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64。 nginx安装 可以参考《Linux学习之CentOS 7源码安装openresty》 安装mariadb数据…

最简单的电子宣传册制作软件

HI&#xff01;今天给大家分享一款操作起来最简单的制作电子宣传册的软件---FLBOOK&#xff0c;它可支持在线排版编辑、一键套用模板的方式&#xff0c;使新手也能制作出优秀的电子宣传册。 具体如何制作的呢&#xff1f; 1.打开FLBOOK&#xff0c;进入FLBOOK主页 2.打开模板专…

在Jupyter中使用AI写代码,如有神助,太惊艳了

昨晚看到一个可以在JupyterLab中使用的AI代码辅助工具jupyter-ai&#xff0c;它的交互确实非常棒&#xff0c;可以直接聊天&#xff0c;也可以就笔记中的代码提问&#xff0c;最出彩的是生成笔记功能&#xff0c;还是蛮惊艳的。 这里就极简介绍一下安装及用法 第一步是创建环…

学习笔记:Pytorch利用MNIST数据集训练生成对抗网络(GAN)

2023.8.27 在进行深度学习的进阶的时候&#xff0c;我发了生成对抗网络是一个很神奇的东西&#xff0c;为什么它可以“将一堆随机噪声经过生成器变成一张图片”&#xff0c;特此记录一下学习心得。 一、生成对抗网络百科 2014年&#xff0c;还在蒙特利尔读博士的Ian Goodfello…

学习笔记230827--vue项目中,子组件拿不到父组件异步获取数据的问题

问题描述 父组件的数据是请求后台所得&#xff0c;因为是异步数据&#xff0c;就会出现&#xff0c;父组件的值传递过去了&#xff0c;子组件加载不到&#xff0c;拿不到值的问题。 下面从同步数据传递和异步数据传递开始论述问题 1. 父组件传递的是同步数据 父组件 <…

【Spring】什么是 AOP(面向切面编程) ? 为什么要有 AOP ? 如何实现 Spring AOP ?

文章目录 前言一、什么是 AOP ?二、为什么要使用 AOP ?三、 AOP 的组成四、Spring AOP 的实现1, 添加依赖2, 定义切面3, 定义切点4, 定义通知5, 创建连接点 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法…

计算机视觉 – Computer Vision | CV

计算机视觉为什么重要&#xff1f; 人的大脑皮层&#xff0c; 有差不多 70% 都是在处理视觉信息。 是人类获取信息最主要的渠道&#xff0c;没有之一。 在网络世界&#xff0c;照片和视频&#xff08;图像的集合&#xff09;也正在发生爆炸式的增长&#xff01; 下图是网络上…