/* 目录: 一: 编译器过程 二: 头文件作用 三: 头文件组织原则 四: 头文件包含原则 五: 测试代码 */
一: 编译器过程
编译器过程: 1 预处理 2 词法和语法分析 3 编译阶段 4 链接阶段
二: 头文件作用
头文件作用: 1 简化声明: 有利于模块化设计 2 提供接口: 保密 - 不公开源码 3 类型检查: 外部调用某头文件接口,与头文件声明不一样,编译器会报错。
三: 头文件组织原则
头文件组织原则: 1 不应包含本地数据,以降低模块间耦合度 2 不允许定义变量和函数 3 只能有变量和函数声明,及宏和类型(结构体)定义 4 尽量使用#pragma once
四: 头文件包含原则
头文件包含原则: 1 头文件包含顺序: 最特殊到一般 2 仅包含当前必需的头文件,减少头文件的嵌套和交叉引用,加快编译速度。 3 源文件中包含的头文件尽量不要有顺序依赖 4 尽量在源文件中包含头文件,而非在头文件中。且源文件仅包含所需的头文件。 5 尽量保证用户使用此头文件时,无需手动包含其他前提头文件,即此头文件内已包含前提头文件
.h文件是头文件,内含函数声明、宏定义、结构体定义 .c文件是程序文件,内含函数实现,变量定义等内容
大神链接: https://www.cnblogs.com/clover-toeic/p/3851102.html
五: 测试代码
文件结构
// Plus.h #include "stdafx.h" int Plus(int i); // 函数声明 extern int gNum; // 变量声明 extern int gNum2; // 变量声明
// Plus.cpp #include "Plus.h" int gNum = 3; // 变量定义 - 全局变量 int Plus(int i) { printf("Plus\n"); int nNum = 0; nNum = gNum + gNum2; printf("%d\n", nNum); return nNum; }
// ConsoleApplication9.cpp #include "stdafx.h" #include "Plus.h" int gNum2 = 10; // 变量定义 - 全局变量 int main() { int nNum = 3; printf("main\n"); nNum = Plus(nNum); nNum = nNum + gNum; printf("%d\n", nNum); return 0; } /* // result main Plus 13 16 */