C++编译预处理

目录

一、包含头文件

1)#include包含头文件又两种方式:

①#include<文件名>:

②#include"文件名":

2)C++98标准后的头文件:

①C的标准库

②C++的标准库

3)注意

二、宏定义

1)分类

①无参数的宏

②有参数的宏

③注意

2)C++中常用的宏

(1)用于调试和日志文件

(2)用于软件版本信息

三、条件编译

1)分类

①#ifdef

②#ifndef

四、解决头文件中代码重复包含的问题

1)分类

①第一种

②第二种

③注意


C++程序编译的过程:预处理->编译(优化、汇编)->链接

预处理指令主要有以下三种

1)包含头文件:#include

2)宏定义:#define(定义宏)、#undef(删除洪)

3)条件编译:#ifdef、#ifndef

一、包含头文件

1)#include包含头文件又两种方式:

①#include<文件名>:

直接从编译器自带的函数库目录(系统头文件)中寻找文件。

②#include"文件名":

先从自定义的目录中寻找文件,如果找不到,再从编译器中寻找。

#include也包含其他的文件,如:*h、*cpp或其它的文件。

2)C++98标准后的头文件:

①C的标准库

老版本有.h后缀,新版本没有.h后缀,增加了字符的前缀,例如老版本是<stdio.h>,新版本是<cstdio>,库中内容是一样的,新老版本都可以用。在程序中,不指定std命名空间

②C++的标准库

老版本的有.h后缀,新版本没有.h后缀。例如新版本是<iostream>,老版本已经弃用,只能用新版本。在程序中,用库中的内容。

3)注意

用户自定义的头文件还是要用.h为后缀

二、宏定义

1)分类

①无参数的宏

#define 宏名 宏内容

②有参数的宏

#define MAX( x , y ) ( (x) > (y) ? (x) : (y) )  (像函数也不是函数,少用)

③注意

编译的时候,编译器把程序中的宏名用宏内容替换,是为宏展开(宏替换)。

宏可以只有宏名,没有后面的宏内容。

在C++中,内联函数可以替代有参数的宏,效果更好。

2)C++中常用的宏

(1)用于调试和日志文件

①当前源代码文件名:__FILE__

②当前源代码函数名:__FUNCTION__

③当前源代码行号:__LINE__

(2)用于软件版本信息

④编译的日期:__DATE__

⑤编译的时间:__TIME__

⑥编译的时间戳:__TIMESTAMP__

⑦当用C++编译程序时,宏_cplusplus就会被定义。(区别C和C++)

三、条件编译

是条件编译指令,不是条件判断语句

1)分类

最常用的两种:#ifdef、#ifndef   if #define if not #define

①#ifdef

#ifdef 宏名

           程序段一

#else

            程序段二

#endif

含义:如果#ifdef后面的宏名已存在,则使用程序段一,否则使用程序段二。

②#ifndef

#ifndef 宏名

           程序段一

#else

            程序段二

#endif

含义:如果#ifndef后面的宏名不存在,则使用程序段一,否则使用程序段二。

四、解决头文件中代码重复包含的问题

1)分类

在C/C++中,在使用预编译指令#include的时候,为了防止头文件被重复包含,有两种方式。

①第一种

用#ifndef指令

#ifndef 宏名

        #define 宏名

        //代码内容

#endif

②第二种

用#pragma once指令放在文件的开头

③注意

#ifndef方式受C/C++语言标准的支持,不受编译器的任何限制;而#pragma once方式有些编译器不支持。

#ifndef可以针对文件中的部分代码;而#pragma once只能针对整个文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值