预编译处理

简介: 预编译处理

1、#include指令(文件包含指令)


方式:


①#include <filename>:按标准方式搜索,文件位于系统目录的include子目录下,一般用于包含例如iostream之类的头文件


②#include "filename":首先在当前目录搜索,若没有,再按标准方式搜索,一般用于包含自定义头文件


2、#define与#undef指令


①#define的作用:


定义符号常量,例如:#define PI 3.14表示定义了一个符号常量PI的值为3.14

声明定义,例如:#define __HEAD_H__表示在此处定义了_HEAD_H


②#undef的作用:删除由#define定义的宏,使之失效


3、条件编译指令


只对满足条件的代码进行编译,将不满足条件的代码舍弃,以达到优化代码的目的



/*
当常量表达式constexpr_1非零时编译程序段codeSegment_1,
否则当常量表达式constexpr_2非零时编译程序段codeSegment_2,
若constexpr_1和constexpr_2都为零,则编译程序段codeSegment_3
*/
#if constexpr_1
    codeSegment_1
#elif constexpr_2
    codeSegment_2
#else
    codeSegment_3
#endif



/*
若标识符identifier已经被#define定义过,则编译程序段codeSegment_1,
否则编译程序段codeSegment_2
*/
#ifdef identifier
    codeSegment_1
#else
    codeSegment_2
#endif



/*
若标识符identifier未被#define定义过,则编译程序段codeSegment_1,
否则编译程序段codeSegment_2
*/
#ifndef identifier
    codeSegment_1
#else
    codeSegment_2
#endif


4、defined操作符


defined是一个操作符,不是指令,所以不需要以#开头,使用方式:defined(identifier)


作用:#ifndef __HEAD_H__等价于#if!defined(__HEAD_H__)


5、预编译处理在工程上的应用


通常在一个工程的头文件中会加上如下预编译指令,来防止重复包含和重复定义


//head.h
#ifndef __HEAD_H__
#define __HEAD_H__
codeSegment
#endif


相关文章
|
Rust
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
208 0
【一起学Rust · 项目实战】命令行IO项目minigrep——接收命令行参数与读取文件内容
|
6月前
|
缓存 JavaScript 前端开发
Android WebView常见问题
本文主要介绍了在Android开发中WebView的使用方法,包括加载网址、设置相关属性(如JavaScript支持、缓存模式、屏幕适配等)、监听网页加载过程以及返回上一页面的功能实现。同时针对Android P版本限制明文流量的问题(ERR_CLEARTEXT_NOT_PERMITTED),提供了在`AndroidManifest.xml`中添加`android:usesCleartextTraffic=&quot;true&quot;`的解决办法。文章还附有完整代码示例,帮助开发者快速上手并解决常见问题。希望对您的开发工作有所帮助!
324 1
|
Java Android开发 开发者
Android10 修改开发者选项中动画缩放默认值
Android10 修改开发者选项中动画缩放默认值
477 0
|
XML JavaScript 数据格式
什么是 DOM?
DOM,即文档对象模型,是W3C制定的访问HTML和XML文档的标准,允许程序动态访问和更新文档的内容、结构和样式。它分为核心DOM、XML DOM和HTML DOM三部分,分别针对不同类型的文档提供标准化的操作接口。
|
11月前
|
容器
Flutter 解决宽度或高度不足而导致的屏幕溢出显示问题
Flutter 解决宽度或高度不足而导致的屏幕溢出显示问题
877 1
|
缓存
uniapp清理app缓存
uniapp清理app缓存
286 0
|
存储 算法 NoSQL
[Eigen中文文档] 稀疏矩阵操作
在许多应用中(例如,有限元方法),通常要处理非常大的矩阵,其中只有少数系数不为零。在这种情况下,可以通过使用仅存储非零系数的特殊表示来减少内存消耗并提高性能。这样的矩阵称为稀疏矩阵。
802 0
|
数据采集 数据可视化 数据挖掘
时间序列分析:用Python解锁金融市场数据的潜在价值
【4月更文挑战第12天】本文介绍了使用Python进行时间序列分析以挖掘金融市场数据价值的方法。金融市场数据具有时间性、不稳定性、非平稳性和相关性等特点。Python中的Pandas和Statsmodels库是进行时间序列分析的常用工具。基本流程包括数据导入、预处理、探索、模型选择(如ARIMA)、模型评估和优化。通过学习和实践,可以有效利用这些工具分析金融市场数据。
319 1
|
Python
Python中的f-string记录表达式:调试文档与实践指南
【4月更文挑战第17天】Python 3.8 引入了f-string记录表达式,允许在格式化字符串时执行赋值操作。这在文档字符串和调试时尤其有用。基本语法是 `f&quot;{variable = expression}&quot;`。示例包括在函数文档字符串中展示变量值和在调试输出中记录变量状态。注意性能和可读性,以及赋值顺序。f-string记录表达式提升了代码效率和维护性,成为Python开发的实用工具。
|
消息中间件 JavaScript 小程序
替代ELK:ClickHouse+Kafka+FlieBeat才是最绝的
替代ELK:ClickHouse+Kafka+FlieBeat才是最绝的