切换模式
写文章
登录/注册
c/c++中,预编译指令用法汇总_第1张图片

c/c++中,预编译指令用法汇总

4 人 赞同了该文章
毕竟西湖六月中,风光不与四时同。—— 南宋·杨万里

1 概述

如下图所示,一般来说c/c++ 程序的编译过程分为如下几个阶段:预处理编译汇编链接。其中预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的整理和转换,产生新的源代码(还是文本文件)提供给编译器。预处理过程先于编译器对源代码进行处理。目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换。预处理过程还会删除程序中的注释和多余的空白字符[1]

c/c++中,预编译指令用法汇总_第2张图片
c/c++中,预编译指令用法汇总_第3张图片

预处理过程由独立的程序执行,与 c/c++语言无关,故而遵循与c/c++不同的语法规则。预处理语句遵循以下几个语法规则[2]

  • 预处理指令必须为所在行的第一个非空白字符;
  • 一条完整的预处理指令必须处于同一行中;
  • 预处理指令与 c/c++ 语句不同,在指令末尾不应该加入分号( ';' )。

预处理程序依次扫描源文件,并对遇到的预处理指令进行处理,直到扫描完所有源文件内容,完成预处理过程,经过预处理过程的文件一般使用 .i 作为后缀。

2 预编译指令

本文总结的预编译指令如下,下面将逐个讨论分析。

#define   //宏定义命名,定义一个标识符来表示一个常量
#include  //文件包含命令,用来引入对应的头文件或其他文件
#undef    //来将前面定义的宏标识符取消定义
#ifdef    //条件编译
#ifndef   //条件编译
#if       //条件编译
#else     //条件编译
#elif     //条件编译
#endif    //条件编译
#error    //用于生成一个编译错误消息