#if等命令的学习
预处理命令
#include(文件包含命令)
#define(宏定义命令)
#undef #if(条件编译)
#ifdef
#ifndef
#elif
#endif defined函数(与if等结合使用)
下面将解释上述各自的用法、使用场景以及不同之处
C语言中的预处理命令在程序编译前进行处理,它们主要用于控制编译过程和代码的条件性包含。以下是各个命令的解释及其使用场景:
1. #include(文件包含命令)
用法: #include <文件名> 或 #include "文件名"
- 功能: 将指定的文件包含到当前文件中,通常用于包含头文件(如标准库或自定义头文件)。
- 使用场景:
#include <...>用于包含标准库或编译器已知的头文件(搜索路径不包括当前目录)。#include "..."用于包含自定义文件,编译器首先在当前目录查找文件。
例子:
#include <stdio.h> // 包含标准输入输出库
#include "myheader.h" // 包含自定义头文件
2. #define(宏定义命令)
用法: #define 宏名 宏内容
- 功能: 定义一个宏,可以是常量或简单的代码片段(如函数的替代)。
- 使用场景:
- 定义常量来替代硬编码的值,使代码更易读。
- 定义简单的宏函数进行重复代码的替代。
例子:
#define PI 3.14159 // 定义常量PI
#define MAX(a, b) ((a) > (b) ? (a) : (b)) // 宏函数,返回较大值
3. #undef(取消宏定义)
用法: #undef 宏名
- 功能: 取消一个已定义的宏。
- 使用场景: 用于防止同名的宏在其他地方被定义,或在需要重新定义宏时。
例子:
#undef PI // 取消之前定义的PI宏
#define PI 3.14 // 重新定义PI
4. #if(条件编译)
用法: #if 表达式
- 功能: 根据表达式的计算结果(非零为真,零为假)决定是否编译其中的代码块。
- 使用场景: 用于根据编译环境、平台或编译选项的不同进行条件性代码编译。
例子:
#if VERSION >= 2 printf("版本2或更高\n");
#endif
5. #ifdef(条件编译)
用法: #ifdef 宏名
- 功能: 当宏名已被定义时,编译该代码块。
- 使用场景: 用于判断一个宏是否已被定义,通常用于防止重复包含头文件或根据宏定义决定编译不同的代码。
例子:
#ifdef DEBUG printf("调试模式\n");
#endif
6. #ifndef(条件编译)
用法: #ifndef 宏名
- 功能: 当宏名未被定义时,编译该代码块。
- 使用场景: 与
#ifdef相反,用于当宏未定义时编译代码,常用于头文件的多重包含保护。
例子:
#ifndef MY_HEADER_H
#define MY_HEADER_H // 头文件内容
#endif
7. #elif(条件编译)
用法: #elif 表达式
- 功能: 类似于
else if,在多个条件中进行选择。 - 使用场景: 用于多条件分支的编译选择,与
#if、#else、#endif结合使用。
例子:
#if VERSION == 1 printf("版本1\n");
#elif VERSION == 2 printf("版本2\n");
#else printf("其他版本\n");
#endif
8. #endif(结束条件编译)
用法: #endif
- 功能: 结束
#if、#ifdef、#ifndef的条件编译块。 - 使用场景: 用于结束条件编译结构。
例子:
#if VERSION >= 2 printf("版本2或更高\n");
#endif // 结束条件编译
9. defined 函数(与 #if 结合使用)
用法: defined(宏名)
- 功能: 判断某个宏是否已定义,通常与
#if结合使用。 - 使用场景: 用于条件性编译时的宏定义检测。
例子:
#if defined(DEBUG) printf("调试模式已启用\n");
#endif
总结:
#include用于包含头文件;#define和#undef用于定义和取消宏;#if、#ifdef、#ifndef、#elif、#endif用于条件编译;defined函数用于判断某个宏是否定义。
这些预处理命令为程序提供了灵活的编译控制,使得代码能够适应不同的环境和配置。
相关文章:
#if等命令的学习
预处理命令 #include(文件包含命令) #define(宏定义命令) #undef #if(条件编译) #ifdef #ifndef #elif #endif defined函数(与if等结合使用) 下面将解释上述各自的用法、使用…...
【有啥问啥】深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法
深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法 0. 引言 Markov Chain Monte Carlo(MCMC)是一类用于从复杂分布中采样的强大算法,特别是在难以直接计算分布的情况下。它广泛应用于统计学、机器学习…...
java企业办公自动化OA
技术架构: sshjbpm 功能描述: 用户管理,岗位管理,部门管理,权限管理,网上交流,贴吧,审批流转。权限管理是树状结构人性化操作,也可以用作论坛。 效果图:...
【leetcode】树形结构习题
二叉树的前序遍历 返回结果:[‘1’, ‘2’, ‘4’, ‘5’, ‘3’, ‘6’, ‘7’] 144.二叉树的前序遍历 - 迭代算法 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,…...
在ros2中安装gazebo遇到报错
安装命令: sudo apt-get install ros-${ROS_DISTRO}-ros-gz 报错如下: E: Unable to locate package ros-galactic-ros-gz 解决方法: 用如下安装命令: sudo apt install ros-galactic-ros-ign 问题解决!...
VMware vSphere 8.0 Update 3b 发布下载,新增功能概览
VMware vSphere 8.0 Update 3b 发布下载,新增功能概览 vSphere 8.0U3 | ESXi 8.0U3 & vCenter Server 8.0U3 请访问原文链接:https://sysin.org/blog/vmware-vsphere-8-u3/,查看最新版。原创作品,转载请保留出处。 作者主页…...
在设计开发中,如何提高网站的用户体验?
在网站设计开发中,提高用户体验是至关重要的。良好的用户体验不仅能提升用户的满意度和忠诚度,还能增加转化率和用户留存率。以下是一些有效的方法和策略: 优化页面加载速度 减少HTTP请求:合并CSS和JavaScript文件以减少HTTP请求…...
油耳拿什么清理比较好?好用的无线可视挖耳勺推荐
油耳的朋友通常都是用棉签来掏耳。这种方式是很不安全的。因为使用棉签戳破耳道和棉絮掉落在耳道中而引起感染的新闻不在少数。在使用过程中更加建议大家可视挖耳勺来清理会更好。不仅清晰度得干净而且安全会更高。但最近这几年我发现可视挖耳勺市面上不合格产品很多࿰…...
永久配置清华源,告别下载龟速
为了每次使用 pip 时自动使用清华源,可以通过以下步骤进行配置: 方法一:通过命令行配置 你可以在命令行中运行以下命令来自动设置清华源: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple此命令会将…...
什么是数据库回表,又该如何避免
目录 一. 回表的概念二. 回表的影响三. 解决方案1. 使用覆盖索引2. 合理选择索引列3. 避免选择不必要的列4. 分析和优化查询5. 定期更新统计信息6. 避免使用SELECT DISTINCT或GROUP BY7. 使用适当的数据库设计 数据库中的“回表”是指在查询操作中,当数据库需要访问…...
UE5中使用UTexture2D进行纹理绘制
在UE中有时需要在CPU阶段操作像素,生成纹理贴图等,此时可以通过UTexture2D来进行处理,例子如下: 1.CPP部分 首先创建一个蓝图函数库,将UTexture2D的绘制逻辑封装成单个函数: .h: #include &…...
Matlab simulink建模与仿真 第十六章(用户定义函数库)
参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、用户定义函数库中的模块概览 注:MATLAB版本不同,可能有些模块也会有差异,但大体上区别是不大的。 二、Fcn/Matlab Fcn模块 1、Fcn模块 双击Fcn模块,在对话…...
每天练打字2:今日状况——完成击键5第1遍,赛文速度74.71
今日跟打:604字 总跟打:99883字 记录天数:2435天 (实际没有这么多天,这个是注册账号的天数) 平均每天:41字 练习常用单字中500,击键5,键准100%,两遍。&#x…...
给新人的python笔记(一)
元组与列表 元组使用圆括号()而不是[]列表的元素可以修改,但元组的元素不能修改 创建元组 menu1 (meat,fish,chicken) 访问元组 print(menu[1:3]) 修改元组 不支持 元组内置函数 len(tuple):计算元组中元素个数;…...
如何实现异步并发限制
如何实现异步并发限制 文章目录 如何实现异步并发限制方法1注意点 方法2题目要求实现方法注意点 之前一直没有系统的去总结异步并发限制的实现思路,今天就来做个总结吧 方法1 只有一个变量 pool:代表正在执行中的任务中的集合 function sleep(name, t…...
孙怡带你深度学习(2)--PyTorch框架认识
文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader(数据加载器)4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…...
如何在Android上实现RTSP服务器
技术背景 在Android上实现RTSP服务器确实是一个不太常见的需求,因为Android平台主要是为客户端应用设计的。在一些内网场景下,我们更希望把安卓终端或开发板,作为一个IPC(网络摄像机)一样,对外提供个拉流的…...
代理导致的git错误
问题: 今天在clone时出现如下错误: fatal: unable to access https://github.com/NirDiamant/RAG_Techniques.git/: Failed to connect to 127.0.0.1 port 10089 after 2065 ms: Couldnt connect to server真是让人感到奇怪!就在前天&#…...
Ready Go
本文首发在这里 温馨提示 XX年,指的是20XX年,后跟以前、以后之类,均包含本数链接较多,只是想言之有物,已拒绝相同外链,仅看关心的即可已尽量只引用自己的东西,16年后仓库(11/13),2…...
Matlab simulink建模与仿真 第十三章(信号通路库)
参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、信号通路库中的模块概览 1、信号通路组 注:部分模块在第二章中有介绍,本章不再赘述。 2、信号存储和访问组 二、总线分配模块 Bus Assignment模块接受总线作为输入,并…...
如何极速获取金融市场数据:5分钟实战指南
如何极速获取金融市场数据:5分钟实战指南 【免费下载链接】qstock qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回测(策…...
ctfshow-web进阶-命令执行绕过技巧(web71-web74)
1. 命令执行漏洞基础与CTF常见场景 命令执行漏洞(Command Execution)是Web安全中一种高危漏洞,它允许攻击者在服务器上执行任意系统命令。在CTF比赛中,这类题目通常会模拟真实环境中开发者未对用户输入进行严格过滤的场景。 我刚开…...
YOLO12开源模型合规部署:离线环境+审计日志+模型版本固化方案
YOLO12开源模型合规部署:离线环境审计日志模型版本固化方案 1. 项目背景与核心价值 YOLO12作为Ultralytics在2025年推出的最新实时目标检测模型,在保持高速推理性能的同时显著提升了检测精度。其引入的注意力机制优化了特征提取网络,nano版…...
springboot+vue基于web的网上考试系统的设计系统
目录同行可拿货,招校园代理 ,本人源头供货商系统功能模块划分题库管理模块在线考试模块自动阅卷模块技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 系统功能模…...
别再写死代码了!用MCP Tool模块5分钟搞定AI与数据库的安全对话
别再写死代码了!用MCP Tool模块5分钟搞定AI与数据库的安全对话 当AI模型需要与数据库交互时,开发者常面临两难选择:要么直接暴露数据库连接信息,要么编写大量胶水代码。这两种方案都存在明显缺陷——前者带来安全隐患,…...
ReplaceItems.jsx:基于智能匹配引擎的Illustrator对象替换解决方案
ReplaceItems.jsx:基于智能匹配引擎的Illustrator对象替换解决方案 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 副标题:面向专业设计师的批量元素管理工具…...
如何用网盘直链下载助手突破限制提升效率:5个实用技巧
如何用网盘直链下载助手突破限制提升效率:5个实用技巧 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...
TTL门电路在现代数字设计中的应用:从基础到OC门实战
TTL门电路在现代数字设计中的应用:从基础到OC门实战 在数字电路设计的工具箱里,TTL(晶体管-晶体管逻辑)门电路就像瑞士军刀一样经典而实用。尽管CMOS技术如今占据主流,但TTL在特定场景下依然展现出独特的优势。特别是在…...
Pixel Aurora Engine实战落地:为像素RPG自动生成NPC对话头像与场景贴图
Pixel Aurora Engine实战落地:为像素RPG自动生成NPC对话头像与场景贴图 1. 像素游戏开发者的新利器 想象一下这样的场景:你正在开发一款像素风格的RPG游戏,需要为上百个NPC设计独特的对话头像,还要制作大量场景贴图。传统方法下…...
Mojo加速Python科学计算:如何在72小时内将AI推理速度提升8.6倍(附完整可运行代码)
第一章:Mojo与Python混合编程概述Mojo 是一种为 AI 系统量身打造的现代系统编程语言,兼具 Python 的易用性与 C/C 的执行效率。它原生兼容 Python 生态,允许开发者在同一个项目中无缝调用 Python 模块、复用现有 NumPy/Torch 代码,…...
