C语言预处理学习笔记
1. 预处理器的功能
预处理器(Preprocessor)在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头,主要包括文件包含、宏定义、条件编译等功能。
2. 文件包含
文件包含功能用于在一个文件中包含另一个文件的内容,通常用于包含头文件。
2.1 #include 指令
#include指令用于包含头文件。头文件可以是标准库头文件或用户自定义头文件。
标准库头文件
标准库头文件使用尖括号<>括起来。
#include <stdio.h>
#include <stdlib.h>
用户自定义头文件
用户自定义头文件使用双引号""括起来。
#include "myheader.h"
3. 宏定义
宏定义用于定义宏常量和宏函数,便于代码的重用和管理。
3.1 定义宏常量
#define指令用于定义宏常量。
#define PI 3.14
#define MAX_SIZE 100
3.2 定义宏函数
宏函数是一种简单的文本替换,不进行参数类型检查和计算。
#define SQUARE(x) ((x) * (x))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
3.3 取消宏定义
#undef指令用于取消宏定义。
#undef PI
4. 条件编译
条件编译用于根据条件选择性地编译代码,便于跨平台开发和调试。
4.1 #if 和 #endif 指令
#if 指令用于在条件为真时编译代码块。
#define DEBUG 1#if DEBUGprintf("Debug mode\n");
#endif
4.2 #ifdef 和 #endif 指令
#ifdef 指令用于在宏已定义时编译代码块。
#define FEATURE_ENABLED#ifdef FEATURE_ENABLEDprintf("Feature is enabled\n");
#endif
4.3 #ifndef 和 #endif 指令
#ifndef 指令用于在宏未定义时编译代码块。
#ifndef MAX_SIZE#define MAX_SIZE 100
#endif
4.4 #else 和 #elif 指令
#else 和 #elif 指令用于在条件为假时编译代码块。
#define VALUE 10#if VALUE < 5printf("Value is less than 5\n");
#elif VALUE < 15printf("Value is less than 15\n");
#elseprintf("Value is 15 or greater\n");
#endif
5. 常用的预定义宏
预定义宏是编译器预定义的宏,可以在程序中使用。
5.1 __FILE__
__FILE__宏表示当前源文件的名称。
printf("Current file: %s\n", __FILE__);
5.2 __LINE__
__LINE__宏表示当前源文件的行号。
printf("Current line: %d\n", __LINE__);
5.3 __DATE__
__DATE__宏表示当前编译日期。
printf("Compile date: %s\n", __DATE__);
5.4 __TIME__
__TIME__宏表示当前编译时间。
printf("Compile time: %s\n", __TIME__);
5.5 __FUNCTION__
__FUNCTION__宏表示当前函数的名称。
void myFunction() {printf("Current function: %s\n", __FUNCTION__);
}
6. 宏和函数的区别
- 宏在预处理阶段进行文本替换,不进行参数类型检查和计算。
- 函数在编译阶段进行实际调用,具有参数类型检查和计算。
6.1 宏示例
#define SQUARE(x) ((x) * (x))int main() {int a = 5;printf("Square of %d: %d\n", a, SQUARE(a));return 0;
}
6.2 函数示例
int square(int x) {return x * x;
}int main() {int a = 5;printf("Square of %d: %d\n", a, square(a));return 0;
}
相关文章:
C语言预处理学习笔记
1. 预处理器的功能 预处理器(Preprocessor)在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头,主要包括文件包含、宏定义、条件编译等功能。 2. 文件包含 文件包含功能用于在一个文件中包含另一个文件的内容,通常用…...
LLM基础环境准备-云服务器
软件环境 腾讯云 操作系统: TencentOS Server 3.1 (TK4) Python: 3.9.0(使用 conda的虚拟python环境,可根据实际需要更换版本,当前使用的是3.9.0的版本) CUDA Version: 12.2(腾讯云会自动安装) Driver Version: 5…...
网络协议相关知识有哪些?
前言 网络协议的基础是OSI和TCP/IP模型,这两个模型是理解协议分层的关键。 正文(仅是个人理解,如有遗漏望海涵) 网络协议是网络中设备间通信的规则和标准,涉及数据传输、路由、错误控制等多个方面。以下是网络协议相关知识的系统梳理: 一、网络协议分层模型 1、OSI七…...
基于Llama 3.2-Vision的医学报告生成
记录运用大模型解决医学报告实例,仅介绍本地调用的情况。 前情提要 已安装 Python 显存不少于8G(8G设备上测试成功,其他环境可以自行测试)。 需要安装Ollama (Ollama 是一个允许在本地运行多模态模型的平台)。 方式1࿱…...
离线部署大模型:ollama+deepseek+open-webui
ollama 是一个开源的本地大语言模型运行框架,它提供了非常简单便捷的使用形式,让用户可以十分方便的在本地机器上部署和运行大型语言模型,从而实现免费离线的方式使用 LLM 能力,并确保私有数据的隐私和安全性。 1 ollama 安装 o…...
如何看nginx.conf文件?
是的,你的理解是对的!在 Nginx 配置中,最内层的 location 确实是决定请求最终处理的“入口”。当请求进入 Nginx 时,Nginx 会根据请求的路径(即 URL)匹配 location 块,然后按照匹配的顺序逐层向…...
3月营销日历:开启春日盛宴,绽放生活魅力
关键营销节点∶惊蛰、女生节、妇女节、 植树节、315消费者权益日、春分 营销关键词 养生、女生魅力、感恩女性、环保、品质 01.重点关注品类 春季服饰:如轻薄外套、春装等,适合惊蛰后的市场需求; 美妆护肤:妇女节期间…...
pdf预览在vue项目中的使用兼容ie浏览器
一、下载pdf预览插件 链接: https://pan.baidu.com/s/1wuzay-saAfiqtS-efd-cvw?pwd6m78 提取码: 6m78 二、创建一个pdf文件夹,将下载下来的文件build和web文件夹复制到pdf文件夹下 三、项目中使用 (路径由两部分组成,第一部分是项目存放pdf插件的路径…...
Unity面板介绍_Project工程面板(23.1.1)
一、project(工程界面) 显示当前工程所有资源文件(场景、脚本、音频、图片。。) Assets资源文件、Library库文件、Project setting项目设置、Temp临时文件 二、面板大致...
使用Termux将安卓手机变成随身AI服务器(page assist连接)
通过以下方法在安卓手机上运行 Ollama 及大模型,无需 Root 权限,具体方案如下: 通过 Termux 模拟 Linux 环境运行 核心工具: 安装 (安卓终端模拟器)()]。借助 proot-distro 工具安装 Linux 发行版…...
MacOS安装Emacs
个人博客地址:MacOS安装Emacs | 一张假钞的真实世界 在MacOS X上可以使用Homebrew 安装Emacs: $ brew install emacs --with-cocoa 或者用MacPorts: $ sudo port install emacs-app OSX Emacs 网站提供了通用的二进制包。 前两种方法安装…...
OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应(标签)、样本权重…...
3.1 actor基本框架(c#的Akka.Actor模式)
1.最简单的一个框架 代码如下(代码容易理解): using System; using Akka.Actor; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.Cryptography.X509Certi…...
Git使用[同一电脑多个账户ssh-key的管理]
同一电脑多个账户ssh-key的管理 现在遇到一个问题,我同一台电脑既要通过VPN访问内网的git也要访问对外释放的gitee,刚开始我直接把原来的SSH-key添加到内网的gitlab发现可以访问,但是后来再方位外网的gitee就出问题了,看来要换一种手段才行 本文引用:https://cloud…...
使用Python结合`stable-baselines3`库(包含PPO和TD3算法)以及`gym`库来实现分层强化学习的示例代码
以下是一个使用Python结合stable-baselines3库(包含PPO和TD3算法)以及gym库来实现分层强化学习的示例代码。该代码将环境中的动作元组分别提供给高层处理器PPO和低层处理器TD3进行训练,并实现单独训练和共同训练的功能。 代码实现 import g…...
【论文笔记】MambaGlue: Fast and Robust Local Feature Matching With Mamba
【引用格式】:Ryoo K, Lim H, Myung H. MambaGlue: Fast and Robust Local Feature Matching With Mamba[J]. arXiv preprint arXiv:2502.00462, 2025. 【网址】:https://arxiv.org/pdf/2502.00462 【开源代码】:https://github.com/uri-Ka…...
基于 Stanford CoreNLP 的中文自然语言处理
一、概述 Stanford CoreNLP 是斯坦福大学开发的一款强大的自然语言处理(NLP)工具,支持多种语言的文本处理,包括中文。本文将详细介绍如何使用 Stanford CoreNLP 实现中文文本的分词、词性标注、命名实体识别、句法分析等功能&…...
python 量化交易入门到提升详细教程,python量化交易教程
文章目录 前言入门阶段1. 环境准备安装 Python选择开发环境安装必要的库 2. 金融数据获取3. 简单策略构建 - 移动平均线交叉策略 进阶阶段1. 策略回测2. 风险管理3. 多因子策略4. 机器学习在量化交易中的应用5. 高频交易策略 前言 Python 作为一门功能强大、易于学习且应用广泛…...
如何设置爬虫的访问频率?
设置爬虫的访问频率(即请求间隔)是确保爬虫稳定运行并避免对目标服务器造成过大压力的关键步骤。合理的访问频率不仅可以减少被目标网站封禁IP的风险,还能提高爬虫的效率。以下是一些设置爬虫访问频率的方法和最佳实践: 1. 使用s…...
前端循环全解析:JS/ES/TS 循环写法与实战示例
循环是编程中控制流程的核心工具。本文将详细介绍 JavaScript、ES6 及 TypeScript 中各种循环的写法、特性,并通过实际示例帮助你掌握它们的正确使用姿势。 目录 传统三剑客 for 循环 while 循环 do...while 循环 ES6 新特性 forEach for...of for...in 数组…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...
