C++中的编译预处理命令

什么是编译预处理?
标识符表示方法这篇博客里我们提到了编译预处理,那么,什么是编译预处理呢?
在c++进行编译时,我们可以通过一些编译命令来告诉编译器如何进行编译,这些命令并不属于c++语言的一部分,由于它们需要在编译前进行处理,所以被称为编译预处理
编译预处理命令有哪些?
c++中预处理命令有三种:宏定义命令,文件包含命令,条件编译命令。
特点如下:
(1).以#来引导,单独占一行
(2).句子结尾没有分号
1.宏定义命令
所谓宏定义,是指用一个指定的标识符来代替一个字符串,它分为不带参数与带参数两种。
(1).不带参数
示例:

#define PI  3.14159

一个被定义过的宏也可以用在别的宏的定义当中,如:

#define WIDTH 80
#define LENGTH (WIDTH+80)

其中,LENGTH定义中的括号不能省略
(2)带参数

#define MAX(a,b)  ((a)>(b)?(a):(b))

同样,定义中的圆括号不能省略
2.文件包含命令
文件包含是指将另一个源文件的内容包含到本程序当中,c++里有两种方式:

#include <文件名> //标准方式
#include "文件名" //用户方式

标准方式是从指定的子目录中查找头文件,用户方式则是从源程序所在的当前目录查找头文件,如果查找不到,则会按照标准方式查找。
通俗点讲,如果你引用的是第三方库的头文件,则采用<>,如果程序是自己写的,就采用“”,当然,前提是自己写的程序是在当前目录下。
如果实在区分不清楚,一律采用“”肯定没问题。
另外,我们可以将一些常用的符号常量写到同一个文件里,通过#include方式将其包含到源程序中。
3.条件编译命令
程序按照一定的方式进行编译源文件的不同部分称为条件编译。c++里最常用的条件编译方式为:

#ifndef x                //先测试x是否被宏定义过
#define x
   <程序段1>   //如果x没有被宏定义过,定义x,并编译程序段 1
#endif   
  <程序段2>   //如果x已经定义过了则编译程序段2的语句,“忽视”程序

其目的在防止头文件重复包含和定义。在c++中,重复包含同一个头文件会在编译时报错。
例如要编写头文件head.h
将其改为如下形式:

#ifndef _HEAD_H
#define _HEAD_H  //标识
     <程序代码> //程序代码为原本的头文件HEAD.h内容
#endif

标识在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前面加下划线,并把文件名中的“.”也变成下划线

这样一个工程文件里同时包含两个head.h时,就不会出现重定义的错误了。
分析:
假如该头文件第一次被引用,HEAD_H没有被定义,所以就执行宏定义,和代码段内容(即真正需要的head.h代码)直到#endif
该头文件第二次被引用的时候,HEAD_H已经被定义,下面的语句就不会执行,从而避免头文件的变量的重复定义和声明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值