当前位置: 首页 > news >正文

C学习-头文件

#灵感#  工作中接触的代码,很庞大。现在拆分一下,逐步学习

目录

(1).h 文件里写的什么

#define 宏定义

只有宏名‌:

#if

#ifdef  #ifndef

#include


(1).h 文件里写的什么

经常用在文件头部的被包含的文件称为“标题文件”或“头部文件”,一般以.h为后缀,如fl.h。
一般情况下将如下内容放到h文件中:

  • 宏定义。                         #define  D  Double
  • 结构、联合和枚举声明。(struct、enum)
  • typedef 声明。    typedef char     char8;
  • 外部函数声明。  void Log_Set_Simple_Mode(BOOL isSample);
  • 全局变量声明。

使用文件包含为实现程序修改提供了方便,当需要修改一些参数时不必修改每个程序,只需修改

(2).h 文件标准格式

#define 宏定义


宏定义指令#define 用来定义一个标识符和一个字符串,以这个标识符来代表这个字符串,在程序中每次遇到该标识符时就用所定义的字符串替换它。

宏定义的作用相当于给指定的字符串起一个别名。
不带参数的宏定义一般形式如下:

#define 宏名  字符串区

# 表示这是一条预处理命令。
宏名是一个标识符,必须符合C语言标识符的规定。
字符串这里可以是常数、表达式、格式字符串等。

例如:
#define Pl 3.14159
该语句的作用是在该程序中用 PI 替代3.14159,在编译预处理时,每当在源程序中遇到PI 就自动
用3.14159代替。
使用#define 进行宏定义的好处是需要改变一个常量时只需改变#define 命令行,整个程序的常量都
会改变,大大提高了程序的灵活性。
宏名要简单且意义明确,一般习惯用大写字母表示以便与变量名相区别。

只有宏名‌:

这种用法通常用于编译时的配置,例如头文件管理。通过定义一个宏名,可以在包含头文件时进行条件编译,避免头文件被重复包含。例如:

#ifndef _XXX_H_

#define _XXX_H_

    // 内容

#endif

这种方式可以确保头文件只被包含一次,即使多次包含同一个头文件,也只会处理一次‌。

#if

#if的基本含义是:如果#if命令后的参数表达式为真,则编译#if到#endif 之间的程序段,否则跳
过这段程序。      #endif 命令用来表示#if段的结束。
#if命令的一般形式如下:

#if 常数表达式
        语句段
#endif

#ifdef  #ifndef

#ifdef 与#ifndef 命令,分别表示“如果有定义”及“如果无定义”。下面就对这两个命令进行介绍。
#ifdef 的一般形式如下:

#ifdef 宏替换名
        语句段
#endif

其含义是:如果宏替换名已被定义过,则对“语句段”进行编译;如果未定义,则不对语句段进行编译。
#ifdef 可与#else 连用,构成的一般形式如下:

#ifdef 宏替换名
        语句段 1
#else
        语句段 2
#endif

其含义是:如果宏替换名已被定义过,则对“语句段1”进行编译;如果未定义#ifdef 后面的宏替
换名,则对“语句段2”进行编译。


#ifndef 的一般形式如下:

#ifndef 宏替换名
        语句段
#endif

其含义是:如果未定义#ifndef 后面的宏替换名,则对“语句段”进行编译:如果定义#ifndef 后面
的宏替换名,则不执行语句段。
同样,#ifndef 也可以与#else 连用.

#include

一个源文件中使用#include 指令可以将另一个源文件的全部内容包含进来,也就是将另外的文件包含到本文件之中。

#include 使编译程序将另一源文件a 嵌入----> 带有#include 的源文件b中。被读入的源文件a必须用双引号或尖括号括起来。例如:
#include "stdio.h"
#include <stdio.h>
这两行代码均使用C编译程序读入并编译,用于处理磁盘文件库的子程序。


上面给出了双引号和尖括号的形式,这两者之间的区别是,用尖括号时,系统到存放C 库函数头文件所在的目录中寻找要包含的文件,这为标准方式;用双引号时,系统先在用户当前目录中寻找要包含的文件,若找不到,再到存放C库函数头文件所在的目录中寻找要包含的文件。

通常情况下,如果为调用库函数用#include 命令来包含相关的头文件,则用尖括号可以节省查找的时间。如果要包含的是用户自己编写的文件,一般用双引号,用户自己编写的文件通常是在当前目录中。如果文件不在当前目录中,双引号可给出文件路径。

相关文章:

  • 20250529-C#知识:静态类、静态构造函数和拓展方法
  • AI 工具赋能并列图制作:从数据输入到可视化的零门槛流程
  • Unity 快捷键
  • 1.测试过程之需求分析和测试计划
  • 在容器里运行go程序报错:/bin/sh: ./manager: not found
  • TensorFlow深度学习实战(18)——K-means 聚类详解
  • window安装nginx
  • 为什么在我的Flask里面有两个路由,但是在网页里有一个却不能正确访问到智能体
  • 华为OD机试真题——Boss的收入(分销网络提成计算)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 第42节:模型优化与部署:Web服务部署(Flask, FastAPI)
  • k8s pod启动失败问题排查
  • 《AI大模型的开源与性能优化:DeepSeek R1的启示》
  • 【达梦数据库】会话sp_close关闭不掉
  • List 源码翻译
  • 3秒响应!奇兵到家南康家博会开启家居售后「即时服务」时代
  • 设计模式之原型模式
  • 基于多模态脑电、音频与视觉信号的情感识别算法【Nature核心期刊,EAV:EEG-音频-视频数据集】
  • [Java恶补day10] 560. 和为K的子数组
  • 前端高频面试题1:HTML/CSS/浏览器/计算机网络
  • LangChain 和 LangChain-ChatChat 的区别
  • 广州网站开发公司/seo赚钱方法大揭秘
  • 哈尔滨网站排名公司/排名函数
  • 网站建设英文怎么说/应用宝下载
  • 大众点评网怎么做团购网站/抖音关键词排名软件
  • 有没有专门做衣服搭配的网站/资源搜索引擎
  • 单位做网站/互联网媒体推广