C语言学习笔记(十):C语言函数进阶与预处理命令详解
一、函数递归1. 什么是递归递归一个函数在执行过程中调用自身。例如void fun() { fun(); }函数fun()调用自己。这种方式称为函数递归。2. 递归的基本结构一个完整的递归函数通常包含两个部分1递归结束条件也叫递归出口。用于停止函数继续调用。例如if(n1) { return 1; }2递归调用部分函数继续调用自身。例如fun(n-1);完整结构返回值 函数名(参数) { if(结束条件) { return 结果; } return 函数名(参数变化); }二、递归案例——斐波那契数列1. 什么是斐波那契数列斐波那契数列1 1 2 3 5 8 13 21 34 55 ...规律后一个数字等于前两个数字之和。例如F(n)F(n-1)F(n-2)2. 使用递归实现代码#includestdio.h int fun(int n) { if(n1 || n2) { return 1; } return fun(n-1)fun(n-2); } int main() { int n; scanf(%d,n); printf(%d\n,fun(n)); return 0; }例如输入10计算F(10)输出55三、递归的特点优点1. 代码简洁一些复杂问题使用递归更加容易理解。例如阶乘斐波那契数列文件目录遍历。缺点1. 占用更多内存递归过程中每调用一次函数都会产生新的函数栈。例如fun(5) ↓ fun(4) ↓ fun(3) ↓ fun(2)会不断占用栈空间。2. 递归过深可能导致栈溢出因此递归必须设置正确的结束条件。四、C语言预处理命令1. 什么是预处理C语言程序执行过程源代码 | ↓ 预处理 | ↓ 编译 | ↓ 链接 | ↓ 执行预处理发生在编译之前。主要作用宏替换条件编译文件包含。五、宏定义宏定义使用#define表示。例如#define PI 3.14程序中printf(%f,PI);预处理后printf(%f,3.14);注意宏只是代码替换不进行计算。例如#define A 12使用int bA*3;替换后int b12*3;结果7而不是9因此宏定义时需要注意括号。六、不带参数宏格式#define 宏名 内容例如#define MAX 100作用提高代码可读性。例如没有宏if(score100)使用宏#define FULL_SCORE 100 if(scoreFULL_SCORE)程序更加容易理解。宏参数快速调整例如#define SIZE 1024如果需要修改数组大小只需要修改#define SIZE即可。七、带参数宏宏函数1. 什么是带参数宏带参数宏类似函数例如#define ADD(a,b) ((a)(b))使用ADD(10,20)替换((10)(20))结果30八、带参宏和函数区别区别宏函数普通函数本质代码替换函数调用参数类型没有有返回值没有有执行效率较高稍低代码大小可能增加不会明显增加宏函数优点执行效率高因为不需要函数调用不需要参数传递减少资源开销。宏函数缺点可能导致程序代码体积增加。例如ADD(1,2) ADD(3,4)每次都会展开。九、条件编译1. 什么是条件编译条件编译根据条件决定哪些代码参与编译。例如某些功能调试时开启发布时关闭。十、#if条件编译格式#if 条件 代码1 #elif 条件 代码2 #else 代码3 #endif例如#define DEBUG #if DEBUG printf(debug); #else printf(release); #endif十一、#ifdef和#ifndef1. #ifdef表示如果宏已经定义则编译代码。格式#ifdef 宏名 代码 #endif例如#define TEST #ifdef TEST printf(hello); #endif2. #ifndef表示如果宏没有定义则编译代码。格式#ifndef 宏名 代码 #endif常用于防止头文件重复包含。例如#ifndef TEST_H #define TEST_H //头文件内容 #endif十二、头文件包含1. #include作用头文件包含将头文件内容展开到当前文件中。例如#includestdio.h预处理后会把stdio.h中的内容加入程序。十三、两种头文件包含方式1. 使用尖括号#includestdio.h查找顺序系统目录 /usr/include通常用于系统提供的头文件。例如#includestdio.h #includestring.h2. 使用双引号#includemyfile.h查找顺序当前目录 ↓ 系统目录通常用于用户自己创建的头文件。

相关新闻

2026年5款主流AI招聘工具自费实测:不吹不黑,企业选型如何避坑?

2026年5款主流AI招聘工具自费实测:不吹不黑,企业选型如何避坑?

开篇说明:测评背景与核心维度 进入2026年,AI招聘工具已经从前沿概念变成了企业人力资源部门的刚需标配。然而,面对市场上铺天盖地的营销通稿,很多HR和技术负责人在选型时一头雾水。为了给团队寻找一款真正靠谱的自动化招聘系统&am…

2026/7/31 5:48:50 阅读更多 →
磁盘爆满不要慌!CentOS7 磁盘全套排查|df/du/mount/find 实战踩坑

磁盘爆满不要慌!CentOS7 磁盘全套排查|df/du/mount/find 实战踩坑

Linux文件系统超全详解|设备识别、磁盘查看、挂载卸载、文件查找(CentOS7实战) 前言 做运维经常遇到磁盘 100% 爆满、U 盘挂载失败、umount 提示 busy。本文全部实操,照着敲就能复现,整理自己踩过的坑。 一、Linux设备…

2026/7/31 5:48:50 阅读更多 →
8款高效AIGC论文降重工具评测与使用指南

8款高效AIGC论文降重工具评测与使用指南

1. 研究生必备:8款高效AIGC降重工具深度评测作为一名在学术领域摸爬滚打多年的研究者,我深知论文降重这个环节有多让人头疼。特别是现在AIGC(人工智能生成内容)技术普及后,传统的查重系统越来越难对付这类内容。今天我…

2026/7/31 5:48:50 阅读更多 →

最新新闻

Web安全入门实战:HackThisSite基础关卡漏洞原理与渗透测试详解

Web安全入门实战:HackThisSite基础关卡漏洞原理与渗透测试详解

1. 项目概述:从零开始的Web安全实战演练场如果你对网络安全感兴趣,刷过一些理论,看过不少“从入门到入狱”的段子,但一打开那些复杂的靶场或者工具就感到无从下手,那么你找对地方了。今天我们不谈空泛的理论&#xff0…

2026/7/31 6:19:01 阅读更多 →
Footprint Tool 3基础操作指南:从数据导入到结果分析的完整流程

Footprint Tool 3基础操作指南:从数据导入到结果分析的完整流程

1. 先搞清楚 Footprint Tool 3 到底解决什么问题 Footprint Tool 3 这类工具,从名字就能看出是用于计算、分析或管理某种“足迹”的专业软件。在实际项目中,足迹分析可能涉及碳足迹、环境足迹、资源消耗足迹、甚至项目进度足迹等多个维度。这个 UNIT 2 的…

2026/7/31 6:19:01 阅读更多 →
Python循环全解析:while与for循环的核心原理、应用场景与避坑指南

Python循环全解析:while与for循环的核心原理、应用场景与避坑指南

1. 循环的本质:为什么我们需要重复执行代码?写代码最怕什么?不是语法错误,也不是逻辑复杂,而是写重复的代码。想象一下,你需要打印数字1到100。如果不用循环,你得老老实实写100行print(1)、prin…

2026/7/31 6:19:01 阅读更多 →
智慧园区IOC:数字孪生赋能园区精细化运营

智慧园区IOC:数字孪生赋能园区精细化运营

智慧园区IOC(智能运营中心)是园区管理的“大脑”。CIMPro孪大师为构建园区IOC提供了高效、低成本的开发方案。平台以园区实体模型为基础,精确构建1:1的三维数字模型,并深度整合产业动态、资产管理、基础设施、能源效率和安全防护等…

2026/7/31 6:19:01 阅读更多 →
C++初始化与赋值底层原理:从汇编视角看性能优化与内存管理

C++初始化与赋值底层原理:从汇编视角看性能优化与内存管理

1. 从“定义”到“执行”:为什么我们需要深究初始化与赋值?在编程的世界里,我们每天都在和变量打交道。定义一个变量,给它一个值,这似乎是再自然不过的操作。但你是否想过,当你写下int a 10;这行简单的 C …

2026/7/31 6:19:01 阅读更多 →
STC89C52单片机驱动DS18B20温度传感器:单总线通信协议详解与实战

STC89C52单片机驱动DS18B20温度传感器:单总线通信协议详解与实战

1. 项目概述:从“点灯”到“测温”的进阶玩过51单片机的朋友,大多都是从点亮一个LED灯开始的。当流水灯、数码管、按键这些基础外设都玩转之后,下一个让你既兴奋又有点头疼的挑战,往往就是与各种传感器打交道。而DS18B20这款数字温…

2026/7/31 6:18:00 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻