预处理阶段,在实际发生编译之前就根据对应的预处理语句进行操作,等到预处理阶段完成之后才进行编译阶段 。
预处理语句主要有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#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<
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++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。这里就不进行过多的介绍。有兴趣的可以自己了解。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧