c++编译预处理

       在编译器对源程序进行实际编译之前,首先要由预处理器对程序文本进行预处理。预处理器提供了一组编译预处理指令和预处理操作符。预处理指令可以根据需要出现在程序的任何位置。

1.#include指令

也称为文件包含指令,其作用是将另一个源文件嵌入到当前源文件该点处。

#include指令可以嵌套使用,假设有嵌入一个头文件file1.h,file1.h中又可以含有#include”file2.h“这条嵌入指令。

2.#define和undef指令

  #define有两个作用:

一是:定义一个常量,就和const一样

#define pi 3.14;

const double pi=3.14;

//选用下面的那种写法更好。

二是:简单点来说就是 做标记,给文件的状态做标记。

#define FILE1_H

这样写的目的,仅仅表是(FILE1_H这个文件已经定义过)这样一种文件状态,就和病毒侵染文件一样,在文件上留下一个标记方便判断。通常该符号配合条件编译一样使用。

3.条件编译指令

使用该指令,可以限定程序中的某些内容在满足一定条件的情况下才参与编译。因此,利用条件编译可以使同一个源程序在不同的编译条件下产生不同的目标代码。

(说白了就和我们长用的if—else语句一样,可以产生不同的效果)

  c++中非0代表成立,0代表不成立。

  写法(1)

#if  常量表达式   (常量表达式和下面的标识符要区分开)

      程序段一       //当常量表达式非零时编译此程序段

#else 

    程序段二         //当常量表达式为零时编译此程序段,#else也可以不写,只写一个#if也可以

#endif

void test01() {
	int a = 0;
#if a==0  
	cout << "条件成立" << endl;
#else
	cout << "条件不成立" << endl;
#endif
}

   写法(2)

多种选择。

#if  常量表达式1

            程序段一       //当常量表达式1非零时编译此程序段

#elif   常量表达式2

            程序段二      //当常量表达式1为零,常量表达式2非零时编译此程序段

             .

             . 

             .

#else 

    程序段n+1   //上面情况都不满足时编译本程序段

#endif

 写法(3)

#ifdef,下面还有一个类似的#ifndef,中间多了个n,意思恰恰相反。

#ifdef  标识符(注意这里换了,不是常量表达式了)

       程序段一

#else

       程序段二

#endif

//如果标识符经过#define定义,且没有被undef删除,则编译程序段一,否则编译程序段二 ,如果没有程序段二,#else可以省去

如果还有程序段三,四.......,则加上#elif


#define DEBUG
int main()
{
#ifdef DEBUG  
	cout << "条件成立,DEBUG已经定义了!" << endl;
#else
	cout << "条件不成立,DEBUG还没定义" << endl;
#endif
	return 0;
}

下面是inndef的情况,上面的写法可以等价为下面的写法 

#ifndef  标识符(注意这里换了,不是常量表达式了)

       程序段一

#else

       程序段二

#endif

 


#define DEBUG
int main()
{
#ifndef DEBUG  
	cout << "条件不成立,DEBUG已经定义了!" << endl;
#else
	cout << "条件成立,DEBUG还没定义" << endl;
#endif
	return 0;
}

//要注意的是,如果是#define 宏名, #define DEBUG,这时候就必须使用#ifdef或#ifndef与之对应,#if不行

//如果是#define 宏名 宏体,如 #define NUM 1,#if 和#ifdef都可以使用。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值