C语言基础知识07---预编译模块化

目录

预编译指令

1.1 编译流程

1.2 文件包含

1.3 条件编译

1.4 宏定义

1.5 无参宏

1.6 typedef和无参宏的区别

1.7 有参宏

1.8 函数与有参宏的区别

1.9 取消宏定义 #undef

1.10 符合使用

模块化操作

1.1 H文件:固定模版

1.2 C文件:源文件---源代码

1.3 模块化

1.4 模块化编译


预编译指令

1.1 编译流程

        预编译-->编译-->汇编-->链接 

        预编译指令是在预编译阶段执行的 

                主要作用:检查代码格式问题,进行文件引用

1.2 文件包含

        #include <file.h> 

                <> 在系统库路径下查找头文件 

        #include “file.h” 

                “” 优先在工程路径下查找,再去系统库路径下查找 

        文件包含:把查找到的头文件内容拼接当当前位置

1.3 条件编译

        #if 0 

        #else 

        #endif

1.4 宏定义

        进行宏名和字符串的等价替换,不进行任何运算和字符的添加

1.5 无参宏

        #define MAX 50 

        printf(“%d\n”, MAX); // 50 

        #define A 2+3 

        printf(“%d\n”, A); // 5 

        printf(“%d\n”, A*5); // 17 

        A*5 的展开宏:2+3*5

1.6 typedef和无参宏的区别

        typedef:程序运行时生效,关键字,重命名数据类型/重定向函数, 

        无参宏:预编译阶段生效,预编译指令,仅做替换 

        typedef int * INTP; 

        INTP m, n; // int *m; int * n; 

        #define INTP int * 

        INTP m, n; // int * m, n; int *m; int n;

1.7 有参宏

        #define MIN(a,b) a>b?b:a 

        printf(“%d\n”, MIN(2,1)); // 1 

        printf(“%d\n”, 2>1?1:2);

1.8 函数与有参宏的区别

        函数:程序运行时被调用,效率低,代码体积变小,参数有类型限制 

        宏:预编译阶段宏展开,效率高,代码体积不变,参数无类型限制

void fun(void)
{for(int i=0;i<5;i++){printf(“%d\n”,i);}
}
#define FUN() { \for(int i=0;i<5;i++) \{                    \printf(“%d\n”,i);     \}                     \
}

1.9 取消宏定义 #undef

        #define MAX 50 

        printf(“%d\n”, MAX);//50 

        #undef MAX 

        printf(“%d\n”, MAX);//MAX 已经失效

1.10 符合使用

        #ifdef MAX 如果定义的有宏 MAX,则以下代码参与编译 

        #endif

模块化操作

1.1 H文件:固定模版

        #ifndef _FILE_H_ //文件名大写 

        #define _FILE_H_ 

                //头文件内容 

                //内容:只进行声明 

                // 函数声明 结构体类型声明 外部声明变量 

                // 预编译指令 #include #define 

        #endif

1.2 C文件:源文件---源代码

        包含自身的头文件 

        函数 全局变量 

        #include   #define

1.3 模块化

        一般来说:一个 C 文件对应一个 H 文件 

                但是也存在,一对多的情况 

        主函数所在的 C 文件:main.c 

        其他的 C 文件名:与模块功能有关

1.4 模块化编译

#include <stdio.h>
#include "add.h"
int main()
{add_t(1,2);return 0;
}
#include <stdio.h>
#include "add.h"
void add_t(int a, int b)
{printf("%d\n", a+b);
}
#ifndef _ADD_H_
#define _ADD_H_void add_t(int a, int b);
#endif

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

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

相关文章

自由学习记录(46)

CG语法的数据类型 // uint : 无符号整数&#xff08;32位&#xff09; // int : 有符号整数&#xff08;32位&#xff09; // float : 单精度浮点数&#xff08;32位&#xff09;&#xff0c;通常带后缀 f&#xff08;如 1.0f&#xff09; // half : 半精度浮…

Agent:大模型中的智能“函数”

在传统的编程范式中&#xff0c;函数是执行特定任务的基本单元。它们接收输入参数&#xff0c;执行预定义的操作&#xff0c;并返回结果。这种模式在确定性和结构化任务中非常有效&#xff0c;但在处理复杂、开放性和非结构化的任务时&#xff0c;函数的局限性就显现出来了。随…

【数据结构】kmp算法介绍+模板代码

目录 1.kmp算法介绍 2.应用场景 3.KMP与暴力算法比较 4.模板代码 KMP算法是一种高效的字符串匹配算法&#xff0c;用于在文本串中快速查找模式串的所有出现位置。其核心思想是通过预处理模式串&#xff0c;避免在匹配失败时进行不必要的回溯&#xff0c;从而将时间复杂度优…

(自用)yolo算法学习

1.难受中&#xff0c;看了教程过后无从下手啊 2.pycharm专业版成功就好 3.安装包时出先问题 (base) PS G:\pycharm\projects\yolo\yolov5> pip install opencv-python>4.1.1 Requirement already satisfied: opencv-python>4.1.1 in g:\anaconda\app\lib\site-packa…

实用工具-Another Redis Desktop Manager介绍

GitHub&#xff1a;https://github.com/qishibo/AnotherRedisDesktopManager/releases Gitee&#xff1a;AnotherRedisDesktopManager 发行版 - Gitee.com Another Redis Desktop Manager 是一款免费的 Redis 可视化管理工具&#xff0c;具有以下特点和功能&#xff1a; 特…

【Azure 架构师学习笔记】- Azure Networking(1) -- Service Endpoint 和 Private Endpoint

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Networking】系列。 前言 最近公司的安全部门在审计云环境安全性时经常提到service endpoint&#xff08;SE&#xff09;和priavate endpoint&#xff08;PE&#xff09;的术语&#xff0c;为此做了一些研究储备。 云…

【汽车开发工具选型指南】Jama Connect® for Automotive解决方案解析

本文来源jamasoftware.com&#xff0c;由Jama Software授权合作伙伴-龙智翻译整理。 Jama Connect for Automotive是什么&#xff1f; Jama Connect for Automotive 旨在为开发团队提供一个统一平台&#xff0c;用于构建安全关键型和网络安全关键型产品。提供满足行业标准和法…

同旺科技USB to SPI 适配器 ---- 指令循环发送功能

所需设备&#xff1a; 内附链接 1、同旺科技USB to SPI 适配器 1、周期性的指令一次输入&#xff0c;即可以使用 “单次发送” 功能&#xff0c;也可以使用 “循环发送” 功能&#xff0c;大大减轻发送指令的编辑效率&#xff1b; 2、 “单次发送” 功能&#xff0c;“发送数据…

分布式中间件:基于 Redis 实现分布式锁

分布式中间件&#xff1a;基于 Redis 实现分布式锁 一、背景引入 在当今的互联网应用中&#xff0c;分布式系统变得越来越常见。在分布式环境下&#xff0c;多个服务实例可能会同时对共享资源进行读写操作&#xff0c;这就很容易引发数据不一致等问题。比如电商系统中的库存扣…

尝试使用Tauri2+Django+React项目(2)

前言 尝试使用tauri2DjangoReact的项目-CSDN博客https://blog.csdn.net/qq_63401240/article/details/146403103在前面笔者不知道怎么做&#xff0c;搞了半天 笔者看到官网&#xff0c;原来可以使用二进制文件&#xff0c;好好好 嵌入外部二进制文件 | Taurihttps://v2.taur…

【006安卓开发方案调研】之大厂APP混合开发方案

基于国内大厂在安卓混合开发领域的实践&#xff0c;以下是主流解决方案及其核心技术实现路径的深度解析&#xff1a; 一、主流混合开发解决方案分类 1. Flutter混合开发体系 架构设计 采用组件化分层架构&#xff0c;原生工程作为宿主&#xff0c;通过MethodChannel与Flutter…

Mysql配套测试之查询篇

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 条件查询简单测试&#xff1a; 1.查询英语成绩不及格的同学(<60) 2…

设计和布局硬件电路是嵌入式系统开发的重要环节

设计和布局硬件电路是嵌入式系统开发的重要环节&#xff0c;涉及从需求分析到原理图设计、PCB&#xff08;印刷电路板&#xff09;布局以及最终的硬件调试。以下是完整的流程和技术要点&#xff1a; 1. 硬件电路设计的基本流程 1.1 需求分析 明确功能需求&#xff1a;确定系统…

PicFlow:一个图片处理与上传工作流工具(图床上传工具)

自从学习搭建网站以来&#xff0c;我就把很多图片托管在七牛云等图床平台上。以前总是通过网页批量上传&#xff0c;需要登录并一步步跳转网页操作&#xff0c;久而久之就厌烦了&#xff0c;于是花了一天时间用 Python 写了一个工具 —— PicFlow&#xff0c;从名字可以看出&am…

Web纯前端实现在线打开编辑保存PPT幻灯片

很多项目中有时会需要在线打开PPT并编辑保存到服务器。猿大师办公助手可以完美调用本地office在线打开ppt文件&#xff0c;跟本地打开效果一样。还可以在线打开word、excel、pdf等文件&#xff0c;支持本机OFFICE完整嵌入模式&#xff0c;本机OFFICE所有功能基本都可以在网页上…

Android Compose 约束布局(ConstraintLayout、Modifier.constrainAs)源码深度剖析(十二)

Android Compose 约束布局&#xff08;ConstraintLayout、Modifier.constrainAs&#xff09;源码深度剖析 一、引言 在 Android 开发中&#xff0c;布局是构建用户界面的基础。随着 Android 开发技术的不断发展&#xff0c;Jetpack Compose 作为一种全新的声明式 UI 框架应运…

常考计算机操作系统面试习题(二)(上)

目录 1. 描述分段内存管理机制 2. 解释文件分配磁盘块链接分配方法的优点和缺点 3. 进程的状态有哪些&#xff1f; 4. 一个进程的空间包括哪些部分&#xff1f; 5. 进程和程序的区别&#xff1f; 6. CPU调度可能发生在当一个进程&#xff1a; 7. 哪些条件同时出现&#…

NR SRS Configuration

文章目录 Frequency PositioningFull-Bandwidth ConfigurationFrequency-Hopping ConfigurationMulti-User ConfigurationsTime-Domain Orthogonal SRSCyclic-Shift Orthogonal SRS Summary and Further ExplorationReferences 此示例展示了如何生成探测参考信号&#xff08;SR…

【行测】言语理解与表达:选词填空

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;读不在三更五鼓&#xff0c;功只怕一曝十寒。 > 目标&#xff1a;掌握选词填空的基本题型&#xff0c;并能运用到例题中。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! …

AWS AI中几个重要的工具介绍

Amazon Bedrock Amazon Bedrock 是使用基础模型构建和扩展生成式 AI 应用程序的最简单方式。Amazon Bedrock 是一项全托管服务&#xff0c;通过 API 提供来自亚马逊和领先 AI 初创公司的基础模型&#xff0c;因此您可以从各种基础模型中选择最适合您用例的模型。借助 Bedrock&…