Files
STM32/Demo1/demo.md
2025-11-26 15:30:35 +08:00

35 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
C语言中.h文件头文件主要用于声明接口如函数原型、宏、类型定义等而.c文件源文件用于实现这些接口的具体功能并包含程序的入口函数main()。
.h文件头文件的作用
- 声明接口内容:包含函数原型、宏定义、类型定义(如结构体)、全局变量声明(使用`extern`)等,为其他文件提供调用依据。例如:
```c
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b); // 函数声明
#define MAX 100 // 宏定义
extern int global_var; // 全局变量声明
#endif
```
- 防止重复包含:通过条件编译指令(如`#ifndef`/`#define`/`#endif`)或`#pragma once`避免编译错误。
- 模块化设计:提供清晰的接口规范,隐藏实现细节,便于多人协作和库文件分发。
.c文件源文件的作用
- 实现功能代码:包含函数的具体逻辑、全局变量的定义(分配内存)和程序入口`main()`。例如:
```c
// math_utils.c
#include "math_utils.h" // 包含对应头文件
int add(int a, int b) { // 函数实现
return a + b;
}
int global_var = 10; // 全局变量定义
```
- 独立编译单元:每个.c文件被编译成目标文件.o再由链接器合并为可执行文件。
- 管理内部细节:可定义静态变量或函数(使用`static`),限制作用域为当前文件,避免命名冲突。
核心关系与工作流程
- 分离编译优势:头文件定义接口,源文件实现功能,提升代码可读性、可维护性和编译效率。
- 预处理过程:编译时,`#include`指令将头文件内容插入源文件,形成完整代码再编译。
- 链接机制:链接器将多个目标文件(.o的符号引用如函数调用解析并绑定到具体定义生成最终程序。
> 示例流程:
> 1. 头文件`math_utils.h`声明`int add(int a, int b);`。
> 2. 源文件`math_utils.c`实现该函数并包含头文件。
> 3. 主程序`main.c`通过`#include "math_utils.h"`调用`add()`,编译后链接所有目标文件执行。