【CPP】大一C++课本知识记录 第六篇 编译预处理

概述

       C++语言允许用预处理命令在程序中写一些命令行,这些预处理命令不是C++语言本身的组成部分,不能进行编译,而是进行“预处理”。

       预处理命令都以 “ # ” 开头,允许出现在程序中的任意位置,但一般写在程序的首部。

       C++提供的预处理功能:

  • 宏定义
  • 文件包含
  • 条件编译

 宏定义

不带参数的宏定义

实质上就是用一个宏名来代表一个字符串,格式为:

#  define  宏名  宏体

在预编译时,将宏名代换成字符串的过程称为 宏代换

宏名一般习惯用大写字母表示;

当需要改变某一变量的值时,可以只改变 #define 命令行,易于修改程序;

可以用 #undef 命令终止宏定义的作用域,同样写在函数外,格式为:

#  undef  宏名

在进行宏定义时,可以引用上方已经定义的宏名,进行层层代换,如下:

#include<iostream>
using namespace std;
#define R 5.0
#define PI 3.14
#define L 2*PI*R
#define S PI*R*R
int main(){
	cout<<L<<endl<<S<<endl;
	return 0;
}

带参数的宏定义

       用宏定义还可以定义带参数的宏,格式如下:

#define  宏名(参数表)宏体

       其中,宏名是一个自定义的标识符;

       参数表可以有一或多个参数,相当于函数的形参列表,但没有类型名;

       宏体就是被代换用的字符序列,功能类似于函数的返回值;

注意点:

  • 宏定义的字符串应写在一行上,若需要写在多行上时,应在一行尾使用续行符 \ ;
  • 在书写带参数的宏定义时,宏名与参数列表中间不能有空格,否则空格右边的字符都将作为字符串;
  • 当参数在真正使用时是两个数的和或差,应该在宏体里的每个参数外都加上圆括号,以免出现优先级问题;
  • 宏代换是在编译前进行的,在代换是不分配内存单元,不进行值的传递,也没有返回值的概念;
  • 在宏代换时不会进行运算,只有简单粗暴的替换;
  • 宏代换不占用运行时间,只占用编译时间。

文件包含处理

一般程序使用已有文件时,文件包含命令格式如下:

# include < 文件名 > 

使用同程序的其他自定义文件时,文件包含命令格式如下:

# include " 文件名 "

系统头文件中的内容包括:

  • 对标准库函数的原型声明
  • 符号常量定义
  • 类型定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值