环境处理收尾

简介: 环境处理收尾

一. 命名约定


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

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


将宏名全部大写

函数名不要全部大写


二. #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的效果也是一样的


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


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


那么大家下期再见咯

相关文章
|
Java 程序员
工作中遇到的点滴
工作中遇到的点滴
74 0
项目的行政收尾工作主要有哪些
项目的行政收尾工作主要有哪些
198 0
|
6月前
|
SQL 监控 测试技术
软件交付问题之项目发布后要关注监控的有效性,如何解决
软件交付问题之项目发布后要关注监控的有效性,如何解决
|
7月前
|
移动开发 应用服务中间件 数据库
详尽分享预发环境与生产环境共享数据库时定时任务重复执行问题解决
详尽分享预发环境与生产环境共享数据库时定时任务重复执行问题解决
72 0
|
8月前
|
存储 Unix Shell
Python 自动化指南(繁琐工作自动化)第二版:十七、计时、安排任务和启动程序
Python 自动化指南(繁琐工作自动化)第二版:十七、计时、安排任务和启动程序
112 1
|
8月前
|
测试技术
如何做好测试执行工作?
如何做好测试执行工作?
|
Cloud Native Linux Go
工作中你会使用到 grpcurl 吗?
工作中你会使用到 grpcurl 吗?
|
存储 运维 Kubernetes
环境管理3阶段:从说明书到命令到说明式|学习笔记
快速学习环境管理3阶段:从说明书到命令到说明式
103 0
环境管理3阶段:从说明书到命令到说明式|学习笔记
|
存储 运维 Kubernetes
环境管理3阶段:从说明书到命令到声明式 | 学习笔记
快速学习环境管理3阶段:从说明书到命令到声明式
环境管理3阶段:从说明书到命令到声明式 | 学习笔记