第10章 预处理

 

10 预处理

10.1预处理指令

指令

含义

实例

#define

定义宏

#define_DEBUG

#undef

取消宏的定义

#undef_DEBUG

#if

判断

#if defined_DEBUG

#else

 

cout<<”debug”<<endl;

#elif

 

#else

#endif

 

cout<<”release”<<endl;#endif

#error

输出错误信息

#error INVALID PARAMETER

#include

包含文件

#include<iostream>

 

10.2宏指令

又称替换指令

10.2.1

#define指令用以定义一个宏(macro),如:

#define MAX 9 //预处理之后,这些MAX将会被替换成9

预处理语句不需要分号“;

也可以将宏定义为一个表达式,如:

#define MAX 9

#define MAX2 MAX*MAX

 

10.2.2 带参数的宏

宏可以包含参数,如:

#define SQUARE(x) x*x

int main()

{

         cout<<”99的平方是:”<<SQUARE(99)<<endl;

return 0;

}

定义宏函数的时候没建议将参数和表达式加上尽可能多的“()”,如:

#define SQUARE(x) ((x)*(x))

也可以定义包含多个参数的宏函数,如:

#define ADD(a,b) ((a)+(b))

宏函数的有点,避免了C++的强类型检测

 

10.2.3 宏与常数、函数*

P163

10.2.4 #操作符  ??

如果宏定义中出现#,预处理器会将其#后面的参数括成一个字符串进行替换

 

10.2.5 ##操作符

##用以将2侧的参数合并成一个,如:

#define RGB (rr,gg,bb) 0x##rr##gg##bb

int red = RGB(FF,00,00);

该语句会被替换为

int red = 0xFF0000;

 

10.2.6 取消宏

宏不允许被重新定义

#define SIZE 10

#define SIZE 12 //error

要修改宏的值,必须先取消他,“#undef”用以取消指定名字的宏,如:

#define SIZE 10

#undef SIZE

#define SIZE 12  //ok

 

10.2.7 C++预定义宏

以下宏不需要定义,已经定义好了

宏名称

含义

__LINE__

整数,代表当前代码所在行数

__FILE__

字符串,代表当前代码所在的文件路径

__DATE__

字符串,代表当前文件的编译日期,格式“Mmm dd yyyy

__TIME__

字符串,代表当前文件的编译时间,格式“hh:nn:ss

__STDC__

代表是否为标准C

__cplusplus

长整数,代表当前的C++版本

 

 

10.3 条件编译指令

10.3.1 #if…#endif

类似与流程控制中的if语句

 

10.3.2 #else

#else #if配套使用,与流程控制一样,它指定#if条件不符合时候的操作

 

10.3.3 #elif

#elif#else #if的组合

 

10.3.4 #if defined #if !defined

#if defined 用以检测指定的宏是否已定义,如:

#if defined VERSION

         cout << “软件版本:”<< VERSION << endl;

#else

         cout << “未指定版本” << endl;

#endif

可以使用!操作符,指定某个宏没有被定义的情形,如:

#if !defined VERSION

         cout << “未指定版本” <<endl;

#endif

 

10.4文件包含指令

10.4.1 #include

#include指令后的文件名用“<>”括起来,它只是预处理器从与舍得标准路径中搜索指定的头文件

另一种用“""”括起来的表示从相对路径搜索

 

C标准库的头文件包括:

<cassert>:assert宏的定义

<cctype>:字符操作函数的声明

<cerrno>:错误码的定义

<cmath>:数学函数库

<csetjmp>:错误处理库

<cstdarg>:可变参数处理宏的定义

<stdio>:标准输入输出函数的声明

<stdlib>:梳子函数、内存管理函数、系统函数、随机函数的声明

<cstime>:时间、日期操作函数声明

<cstring>:C类型的字符串的操作函数声明

C++标准库的头文件包括:

<string>:字符串

<iostream>:流操作

<fstream>:文件流

<complex>:复数

<stdexcept>:标准异常

STL:标准模板库

 

10.4.2 合理使用头文件

被包含的文件通常被成为“头文件”

一般设计头文件的时候加入一下部分可以避免重定义的发生

#ifndef __HEADER_POINT_H__

#define__HEADER_POINT_H__

 

结构

 

#endif

 

HEAD_H部分可以随便换

 

10.5其他标准指令

10.5.1 #error

当编译器遇到#error指令时,他会听下来,并在编译窗口(不是运行窗口)输出#error后面的信息

 

10.5.2 #line

用以改变当前行的行号和文件名,如:

#line 100

#line 100 “core.cpp”

 

10.5.3 #pragma

每个编译器可以定义属于他自己的#progma指令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值