开 场 白 : 很 多 人 也 把 多 文 件 编 程 称 作 模 块 化 编 程 ,其 实 我 觉 得 叫 多 文 件 编 程 会 更 加 符 合 实际 一 些 。 多 文 件 编 程 有 两 个 最 大 的 好 处 , 一 个 是 给 我 们 的 程 序 增 加 了 目 录 , 方 便我 们 查 找 。 另 外 一 个 好 处 是 方 便 移 植 别 人 已 经 做 好 的 功 能 程 序 模 块 , 利 用 这 个 特点 , 特 别 适 合 团 队 一 起 做 大 型 项 目 。 很 多 初 学 者 刚 开 始 学 多 文 件 编 程 时 , 会 经 常遇 到 重 复 定 义 等 问 题 ,想 知 道 怎 么 解 决 这 些 问 题 吗 ? 只 要 按 照 以 下 鸿 哥 教 的 规 则来 做 , 这 些 问 题 就 不 存 在 了 。 第 一 个 : 每 个 文 件 保 持 成 双 成 对 出 现 。 每 个 .c 源 文 件 必 须 有 一 个 .h 头文 件 跟它对 应, 每 个 .h 头文 件 必 须 有 一 个 .c 源 文 件 跟它对 应。 比如: main.c 与main.h,delay.c 与 delay.h。 第 二个 : .c 源 文 件 只 负责函数的 定 义 和变量的 定 义 , 但是 不 负责函数的 声明和变量的 声明。 比如: unsigned char ucLedStep=0; //这 个 是 全局变量的 定 义 void led_flicker() //这 个 是 函数的 定 义 { //…里面是 具体代码内容 } 第 三个 : .h 头文 件 只 负责函数的 声明和变量的 声明, 以 及常 量和IO 口的 宏 定 义 ,但是 不 负责函数的 定 义 和变量的 定 义 。 比如: #define const_time_level 200 //这 个 是 常 量的 宏 定 义 sbit led_dr=P3^5; //这 个 是 IO 口的 宏 定 义 void led_flicker(); //这 个 是 函数的 声明 extern unsigned char ucLedStep; //这 个 是 全局变量的 声明, 不 能 赋 初 始值 第 四 个 : 每 个 .h 头文 件 都 必 须 固 定 以 #ifndef, #define, #endif 语 句 为 模 板 ,此 模 板 是 用 来 避 免 编 译 时 由 于 重 复 包 含 头文 件 里面的 内容而 导 致 出 错 。其 中 标 志变量_XXX_鸿 哥 建 议 用 它本 ...