环境处理收尾

简介: 环境处理收尾

一. 命名约定


一般来讲 函数和宏的用法十分相似所以语言没办法帮我们区分二者。

拿我们平时的一个习惯是:


将宏名全部大写

函数名不要全部大写


二. #undef


当我们下面不想再用一个宏的时候我们可以使用这个符号

这样我们下面就无法使用宏了


举个例子

882a6e316a144666bda360fdf5cf474c.png

使用了这个#undef之后 我们就不能再使用Max了


三. 命令行定义


我们先在vim编译器下写出这段代码


c3a79fa7424848c5900525a84045ce87.png


然后尝试编译它


5ee81e39e13a46a5a78217833400ad9f.png


我们可以发现它给我们报错了 说sz没有定义


然后我们可以尝试在编译的时候去指定sz的大小


b26b776ff7e6409287236c100c78ca18.png

ebfaa552048543a19e2bbecbba441a54.png

我们可以发现程序成功编译出来了


我们尝试执行一下试试

52c8051949fb47f9a04b7c1d57ef4243.png


发现是可以完美运行的


然后我们再尝试输入sz=99试试


9597c057dc8f44088a3fdc5cffd77b1f.png


我们可以发现 这也是可以完美运行的


是不是很神奇


代码里面明明有个符号没有定义 我们却可以运行它


这就叫命令行定义


当我们想要编译出一个程序的不同版本时 这个特性就有点用处


四. 条件编译


直接上代码

96ae16e512c34b1db1f85aea79f13f8b.png


当我们写出以上的代码的时候 我们可能会好奇 数组里面到底有没有放shuzi


那么我们就可以加上这么一行代码


f49652558cba411baef736bfe02da111.png


但是呢 这么一行代码其实是没什么用的 删了又有点可惜 这时候我们就可以使


用我们的条件编译

2ed2105267d04085b9e3ad30fcdb8ad1.png

当我们不想要它的时候我们可以将1改成0


09b3cf13dc6f4bab93577ade130ac529.png


常见的条件编译指令有


1.
#if 常量表达式
 //...
#endif
//常量表达式由预处理器求值。
如:
#define __DEBUG__ 1
#if __DEBUG__
 //..
#endif
2.多个分支的条件编译
#if 常量表达式
 //...
#elif 常量表达式
 //...
#else
 //...
#endif
3.判断是否被定义
#if defined(symbol)
#ifdef symbol
#if !defined(symbol)
#ifndef symbol
4.嵌套指令
#if defined(OS_UNIX)
 #ifdef OPTION1
 unix_version_option1();
 #endif
 #ifdef OPTION2
 unix_version_option2();
 #endif
#elif defined(OS_MSDOS)
 #ifdef OPTION2
 msdos_version_option2();
 #endif
#endif


多分支

17987a0623c04703ba6e971c778e13b6.png

判断是否定义


ea8e28bcdffd45699893abfe4c401e02.png

7f88ead750e24210966d57d901cf679f.png


五. 文件包含


5.1 查找策略


查找策略:先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件。

如果找不到就提示编译错误。


5.2 文件的嵌套包含


所以说我们可以写出以下代码

db639080c47241769b14f887fb1bb7e3.png


当我们写出这些代码的时候 头文件就会只会被引用一次


当然使用#pragma once的效果也是一样的


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏


希望大佬们看到错误之后能够不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
SQL Java
Spring-data-jpa EntityManager封装通用Dao
由于在项目中添加新的业务,该项目使用jpa 但是表结构不是这个项目产生,所以使用jpa实体管理器(EntityManager)封装了一个通用的Dao sql封装类 package com.
4720 0
|
3天前
|
云安全 数据采集 人工智能
古茗联名引爆全网,阿里云三层防护助力对抗黑产
阿里云三层校验+风险识别,为古茗每一杯奶茶保驾护航!
古茗联名引爆全网,阿里云三层防护助力对抗黑产
|
3天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
499 1
kde
|
3天前
|
人工智能 关系型数据库 PostgreSQL
n8n Docker 部署手册
n8n是一款开源工作流自动化平台,支持低代码与可编程模式,集成400+服务节点,原生支持AI与API连接,可自托管部署,助力团队构建安全高效的自动化流程。
kde
334 3
|
3天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
231 91
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
|
4天前
|
传感器 人工智能 算法
数字孪生智慧水务系统,三维立体平台,沃思智能
智慧水务系统融合物联网、数字孪生与AI技术,实现供水全流程智能监测、预测性维护与动态优化。通过实时数据采集与三维建模,提升漏损控制、节能降耗与应急响应能力,推动水务管理从经验驱动迈向数据驱动,助力城市水资源精细化、可持续化管理。
282 143
|
18天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!