【C++中预处理语句 include、define、if】

1.预处理阶段

一般执行过程
预处理阶段,在实际发生编译之前就根据对应的预处理语句进行操作,等到预处理阶段完成之后才进行编译阶段 。

2.预处理语句

预处理语句主要有include、define、if 和 program。利用 # 进行标记

2.1 include语句

include语句就是将所包含的文件给复制到当前文件中.

//Math1.h
}

//math11.cpp
int sum_(int a, int b) {
    
    
	return a + b;
#include"Math1.h"  //等价于 }

上诉代码中,利用include进行预处理,直接将"Math1.h"中的内容直接赋值过来。后面编译器编译math11.cpp实际上的内部执行内容是

#line 1 "C:\\dev\\cppstudy\\hello\\hello\\math11.cpp"
int sum_(int a, int b) {
    
    
	return a + b;
#line 1 "C:\\dev\\cppstudy\\hello\\hello\\Math1.h"
}
#line 4 "C:\\dev\\cppstudy\\hello\\hello\\math11.cpp"

也就是

int sum_(int a, int b) {
    
    
	return a + b;
}

2.2 define语句

define语句底层实现就是一个简单的字符串替换,就是将指定的字符串替换成为目标字符串,然后再进行编译

//math22.cpp
#define INTEGER int
INTEGER sum_(INTEGER a, INTEGER b) {
    
    
	return a + b;
}

实际上,在预处理阶段,将字符串 INTEGER 替换成 int,然后再对文件进行编译,编译的实质内容是:

int sum_(int a, int b) {
    
    
	return a + b;
}

通过运行下面这个例子,可以帮助你更好理解

#include<iostream>
#define SUM(a,b) a+b
using namespace std;
int main(){
    
    
	int a=2,b=3;
	int c=a*SUM(a,b)*b;//直接替换 c=a*a+b*b
	cout<<c;//13 并不是30
}

2.3 if语句

​ if处理语句可以帮助我们包含或者排除基于条件的代码。

#if 1
int sum_(int a, int b) {
    
    
	return a + b;
}
#endif

因为条件为 1,所以编译器会编译 #if 与 #endif 直接的语句,编译的实质内容是:

int sum_(int a, int b) {
    
    
	return a + b;
}

如果if条件为0 则不会编译其中的内容

2.4 progra语句

所有 预处理 其中, #pragma 应该最复杂了。
它的作用是设定 编译器 的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。这里就不进行过多的介绍。有兴趣的可以自己了解。

猜你喜欢

转载自blog.csdn.net/mitongxue/article/details/128053925