《c++徒步》宏篇

发布时间 2023-05-06 11:20:19作者: Fusio

预处理命令

参考链接:https://blog.csdn.net/akpe80900/article/details/102070084

预处理命令是什么

预处理语句,预处理语句是以#为起始标记,后面跟上预处理关键词。
预处理功能,例如,宏定义、文件包括、条件编译等

define

语法:

//用来定义宏
#define

使用:

//定义常量
#define MAX_WIDTH 100
//定义宏函数
#define getmax(a,b) a>b?a:b

undef

语法:

//用来取消宏
#undef

使用:

#define MAX_WIDTH 100
#undef MAX_WIDTH

ifdef ifndef

//只有定义所指宏情况下,才被编译
//#ifdef
//与上述相反
#ifndef

用法:

#ifdef MAX_WIDTH
char str[MAX_WIDTH];
#endif

#ifndef MAX_WIDTH
#define MAX_WIDTH 100
#endif

if elif else endif

//#if #elif(即else if) #else
// 判断条件为真时,才被编译
//#endif
// endif为结尾

用法:

#if MAX_WIDTH>200
#undef MAX_WIDTH
#define MAX_WIDTH 200

#elsif MAX_WIDTH<50
#undef MAX_WIDTH
#define MAX_WIDTH 50

#else
#undef MAX_WIDTH
#define MAX_WIDTH 100
#endif

char str[MAX_WIDTH];

pragram

用来配置编译器,本次不过多描述。

include

最常见的预处理命令

//1先在当前目录下寻找,然后再到默认路径下
#include "file"
//2直接在默认路径下找
#include <file>

line

当编译发生错误时,使用#line显示出错信息

#line 1 "assigning variable"
int a?;

报错会显示:"assigning variable", line 1 。

error

中断编译返回一个出错信息。

#ifndef __cplusplus
#error A C++ compiler is required
#endif

这个例子中如果__cplusplus没有被定义就会中断编译过程。

常见的宏

LINE

正在编译行对应源文件的行数

__LINE__

cout << "This is the line number "<< __LINE__;

FILE

被编译源文件的名称

__FILE__

DATA TIME

存储编译开始的日期,“Mmm dd yyyy”格式

__DATA__

存储编译开始的日期,“hh:mm:ss”格式

__TIME__

cplusplus

整数值,所有C++编译器都定义了这个常量为某个值。如果这个编译器是完全遵守C++标准的,它的值应该等于或大于199711L,具体值取决于它遵守的是哪个版本的标准。

__cplusplus

cout << "The compiler gives a "<<"__cplusplus value of "<< __cplusplus;