预处理是个有争议的东西,但是在工程中往往有着举足轻重的作用。

比如一些跨平台的库都是根据预编译器中定义的预编译宏来选择执行不同的代码。

C++的预处理(Preprocess),是指在C++程序源代码被编译之前,由预处理器(Preprocessor)对C++程序源代码进行的处理。这个过程并不对程序的源代码进行解析,但它把源代码分割或处理成为特定的符号用来支持宏调用。

#include 包含头文件
#if 条件
#else 否则
#elif 否则如果
#endif 结束条件
#ifdef 或 #if defined 如果定义了一个符号, 就执行操作
#ifndef 或 #if !defined 如果没有定义一个符号,就指执行操作
#define 定义一个符号
#undef 删除一个符号
#line 重新定义当前行号和文件名
#error 输出编译错误 消息, 停止编译
#pragma 提供 机器专用的特性,同时保证与C++的完全兼容

之前的博客就介绍过如何使用undef来屏蔽系统的关键字。

看下面的预处理:

#ifdef PLATFORM == WINDOWS
#include<Windows.h>
#endif

上面的代码经常出现,我们会在:
项目上右键,选择属性,
选择C/C++
选择预处理器
在预处理器定义中加入:

PLATFORM == WINDOWS

一切看上去那么完美。

但是等等,当你运行代码的时候,却达不到你的目的。

你会惊讶的发现,预处理器根本就没有起作用。

这时候,你幡然醒悟,你搞混了==和=,于是如下修改:

PLATFORM = WINDOWS

你满心欢喜,以为大功告成,但是等等。运行代码还是达不到你想要的结果。预处理器还是没起到任何作用。

原因在这里:
=的两边不能有空格。
在预处理器中已空字符作为识别一个宏定义的结束。

所以正确的写法:

PLATFORM=WINDOWS

注意:
1区分==和=
2在预处理器中不要有空格

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐