程序设计领域中,预处理一般是指在程序源代码被翻译为目标代码的过程中,生成二进制代码之前的过程。典型地,由预处理器(preprocessor) 对程序源代码文本进行处理,得到的结果再由编译器核心进一步编译。这个过程并不对程序的源代码进行解析,但它把源代码分割或处理成为特定的单位——(用C/C 的术语来说是)预处理记号(preprocessing token)用来支持语言特性(如C/C 的宏调用)。
最常见的预处理是C语言和C 语言。ISO C和ISO C 都规定程序由源代码被翻译分为若干有序的阶段(phase) ,通常前几个阶段由预处理器实现。预处理中会展开以#起始的行,试图解释为预处理指令(preprocessing directive) ,其中ISO C/C 要求支持的包括#if/#ifdef/#ifndef/#else/#elif/#endif(条件编译)、#define(宏定义)、#include(源文件包含)、#line(行控制)、#error(错误指令)、#pragma(和实现相关的杂注)以及单独的#(空指令) 。预处理指令一般被用来使源代码在不同的执行环境中被方便的修改或者编译。
预处理器在UNIX传统中通常缩写为PP,在自动构建脚本中C预处理器被缩写为CPP的宏指代。为了不造成歧义,C (cee-plus-plus) 经常并不是缩写为CPP,而改成CXX。
注意预处理常被错误地当作预编译(precompiling) ,事实上这是两个不同的概念。预处理尽管并不是ISO C/C 要求的单独阶段,但“预处理”这个术语正式地出现并参与构成其它术语,如C的预处理翻译单元(preprocessing translation unit) 以及C/C 词法规则中预处理记号(prerprocessing-token) 这个语法分类 。预编译是一些编译器支持的特性,不是C/C 语言的特性或实现必须要求遵循的规则涉及到的内容,没有在ISO C/C 全文中出现 。