c++预处理

预处理

预处理是在编译之前进行的处理,C/C++的预处理主要是宏定义、文件包含、条件编译。

指令

描述

#define

定义宏

#include

包含一个源代码文件

#undef

取消已定义的宏

#ifdef

如果宏已经定义,则返回真

#ifndef

如果宏没有定义,则返回真

#if

如果给定条件为真,则编译下面代码

#else

#if 的替代方案

#elif

如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码

#endif

结束一个 #if……#else 条件编译块

#line

用于强制指定新的行号和编译文件名,并对源程序的代码重新编号

#error

当遇到标准错误时,输出错误消息

#pragma

使用标准化方法,向编译器发布特殊的命令到编译器中

宏定义

  1. 不带参数
#define 标识符 文本

宏名一般用大写

使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义

可以用#undef命令终止宏定义的作用域

#define MAX_WIDTH 100
char str1[MAX_WIDTH];
#undef MAX_WIDTH

宏定义可以嵌套
2. 带参数

#define 宏名(参数表) 文本

例如,

#define S(a,b) ab
将area=S(3,2);进行宏替换,第一步被换为area=a
b; ,第二步被换为area=3*2;
注意:有时宏替换后和我们预期的结果不一样需要注意一下,宏替换只是简单的替换。

条件编译

//当标识符已经定义时,程序段1才参加编译。

#ifdef
程序段1
#endif

//if else
#ifdef 标识符
程序段1
#else
程序段2
#endif

//if elif ... else
//指令#if, #else 和 #elif (elif = else if) 用来使得其后面所跟的程序部分只有在特定条件下才被编译。这些条件只能够是常量表达式
#if 表达式1
程序段1
#elif 表达式2
程序段2
……
#elif 表达式n
程序段n
#else
程序段n+1
#endif

#ifndef 起相反的作用:在指令#ifndef 和 #endif 之间的代码只有在某个常量没有被定义的情况下才被编译

line

用于强制指定新的行号和编译文件名,并对源程序的代码重新编号
#line编译指示字的本质是重定义 LINE和 FILE

error

#error message
//message不需要用双引号包围
//类似的,#warning用于生成编译警告。

#error命令可以简单的使编译器在发生错误时停止. 当遇到一个#error时,编译器会自动输出行号而无论message的内容. 本命令大多是用于调试,或者检测比较严重的错误
比如需要使用C++编译器,可用如下判断:

#ifndef __cplusplus
    #error This file should be processed with C++ compiler.
#endif

需要使用VS编译器,可以使用如下宏判断

#ifndef _MSC_VER
#error require visual studio compiler
#endif

大部分转载于
https://www.cjavapy.com/article/1811/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值