C 的 前 置 处 理 器
l l 前 置 处 理 器 (preprocessor)
我 们 在 写 程 式 的 时 候 , 常 常 会 碰 到 某 些 资 料 重 覆 使 用 或 是 某 些 程 式 片 段 因 特 定 的 条 件 下 须 放 弃 , 如果 以 正 常 的 方 式 来 写 作 程 式 , 可 能 会 增 加 无 谓 的 程 式 片 段 , 使 的 程 式 笨 重 不 堪 , 但 如 果 能 好好 运 用 C 语 言 所 提 供 的 前 置 处 理 器 , 则 上 述 的 状 况 将 改 善 许 多 . 这 个 功 能 并 非 C 语 言 本 身 的格 式 , 但 仍 为 编 译 程 式 所 能 接 受 . 对 前 置 处 理 器 的 解 释 , 如 图 所 示 , 因 为 它 是 在 程 式 编 译 之前 执 行 , 所 以 顾 名 思 义 称 之 前 置 处 理 .
l l 前 置 处 理 器 格 式 与 种 类
<1> 前 置 处 理 器 的 格 式 如 下:
#前置处理器名称 处理内容
<2> 前 置 处 理 器 叙 述 可 写 在 程 式 中 的 任 何 地 方 .
<3> 前 置 处 理 器 的 种 类 如 下 表 一 所 列 , 其 各 种 前 置 处 理 器 之 使 用 方 法 , 我 们 将 在 以 下 的 章 节 中 一 一 介 绍 .
| 功 能 | 前置处理器之叙述 |
| 档案的含入 | #include |
| 字符串的置换/宏定义 | #define / #undef |
| 条 件 编 译 | #if .... #elif .... #else .... #endif #ifdef (#ifndef) .... #else .... #endif |
l l #include(檔 案 的 含 入)
此 叙 述 之 主 要 目 的 是 让 我 们 将 某 个 程 式 檔 或 标 头 檔 包 括 在 目 前 的 程 式 内 , 使 目 前 的 程 式 可 引 用 该 檔 内 的 资 料 或 程 式 . 语 法 如 下 :
<1> #include "文件名称" : 此表示系统将会到目前的目录 (路径 )
下寻找所指定的档案 ,如果找不到 ,则
会去系统设定的目录底下寻找 .
<2> #include <文件名称> : 此表示系统将会到系统设定的目录底下
寻找所指定的档案 .
Example: #include < stdio.h > #include "def.h"
main() { printf("PI=%2.5f/n",PI); printf("a+b=%d/n",a+b); } | -- def.h 的档案内容 -- #define PI 3.14159 #define a 10 #define b 20 ---------------------- 执行结果 : PI=3.14159 a+b=30 |
l l #define(字 串 的 置 换 / 巨 集 定 义)与 #undef
<1> 巨 集 #define 的 使 用 :
其主 要 之 功 能 是 以 简 单 的 名 称 取 代 某 些 特 定 的 常 数 或 字 串 , 函 数 , 建 立 更 简单 更 易 懂 的 程 式 . 语 法 如 下 :
#define 宏名称 常数或函式或字符串
<2> 巨 集 #undef 的 使 用 :
其 主 要 之 功 能 则 是 取 消 最 接 近 之 #define 所 定 义 的 叙 述 .
#undef 宏名称
Example1: #include < stdio.h > #define PI 3.14159 main() { printf("PI=%2.5f",PI); } | 执行结果 : PI=3.14159 |
Example2 : #include < stdio.h > #define add(a,b) a+b
void main(void) { int i,j,k; i=2; j=3; k=add(i,j); printf("i+j=%d/n",k); } 执行结果 : i+j=5 | Example3: #include < stdio.h > #define pstring "This is my first C program./n"
void main(void) { printf(pstring,1); } 执行结果 : This is my first C program. |
Example4 :
#include < stdio.h > #define compare(a,b) / if ( a > b ) / printf("a > b"); / else / if ( a < b ) / printf("a < b");/ else / printf("a = b"); void main(void) { int a,b; a=5; b=10; compare(a,b); } 执行结果 : a < b | Example5 :
#include < stdio.h > #define TURBOC
void main(void) { #ifdef TURBOC printf("Borland C compiler./n"); #endif #undef TURBOC #ifndef TURBOC printf("MircoSoft C compiler./n"); #endif } 执行结果 : Borland C compiler. MircoSoft C compiler. |
l l 条 件 式 的 编 译
<1> 条件 式 的 编 译, 此 用 法 的 最 大 特 色 在 于 其 叙 述 不 仅 可 以 放 在 程 式 的 顶 端 , 亦可 将 其 叙 述 放 置 于 程 式 中 . 以 下 所 列 (1) ,(2) ,(3) 项 为 条 件 式 编 译 的 成 员 .
(1) #if 和 #endif
(2) #else / #elif
(3) #ifdef 和 #ifndef
<2> 由 以 上 的 叙 述 , 我 们 不 难 发 现 这 些 条 件 式 编 译 的 成 员 与 前 几 章 控 制 流 程 所 提 到 if ... then ... else 的 语 法 十 分 相 似 , 且 连 使 用 方 法 与 原 理 都 非 常 相 似 .
Example1: #include < stdio.h > #define value 99 void main(void) { #if value < 100 printf("value < 100"); #else printf("value >= 100"); #endif }
执行结果 : value < 100 | Example2: #include < stdio.h > #define value 100
void main(void) { #if value < 100 printf("value < 100"); #elif value > 100 printf("value > 100"); #else printf("value = 100"); #endif } 执行结果 : value = 100 |
本文详细介绍了C语言中的前置处理器功能及其使用方法,包括档案的含入、字符串的置换、宏定义以及条件编译等内容。
184

被折叠的 条评论
为什么被折叠?



