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

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 命令来包含相关的头文件,则用尖括号可以节省查找的时间。如果要包含的是用户自己编写的文件,一般用双引号,用户自己编写的文件通常是在当前目录中。如果文件不在当前目录中,双引号可给出文件路径。

http://www.xdnf.cn/news/9958.html

相关文章:

  • iVX 如何用 VL 中间语言构建程范式闭环?
  • [SC]SystemC语法小结(一)
  • Linux部署python项目为服务,开启自启动
  • 上传图片转成3D VR效果 / 用photo-sphere-viewer实现图片VR效果 / VR效果在项目中落地实践
  • WebBuilder赋能中山欣锠鞋业数字化转型实践
  • Web 系统验证码与登录安全防护全攻略(附实现方案)
  • The CTeX fontset “fandol“ is unavailable in the current mode.
  • 复合机器人:纠偏算法如何重塑工业精度与效率?
  • AET3156AP电源方案 禾纳代理商
  • 1.什么是node.js、npm、vue
  • vue3 各种数据处理
  • Spring 核心知识点补充
  • 文档处理的相关工具
  • MMR搜索和LangChain整合Milvus实战
  • 小白的进阶之路系列之七----人工智能从初步到精通pytorch自动微分优化以及载入和保存模型
  • 高精度、高效率:正面吊箱号识别系统如何实现精准识别
  • 多模态大模型:开启智能决策的新时代
  • TimeoutException问题排查
  • 必会利器:scp 命令
  • Linux程序管理练习题
  • Python中的enumerate函数:优雅地遍历序列索引与元素
  • 一个开源脚本,可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内容
  • 【Java Web】速通CSS
  • DeepSeek与AI提示语设计的全面指南
  • 使用大模型预测结节性甲状腺肿的全流程系统技术方案
  • 花哨桌面 V 3.0.0 (火影忍者版)
  • 模型评估指标详解:准确率、召回率、AUC 是什么?
  • WebVm:无需安装,一款可以在浏览器运行的 Linux 来了
  • 使用有名管道(FIFO)实现循环通信的客户端-服务端
  • 深入了解linux系统—— 库的链接和加载