#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模块接受总线作为输入,并…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
