嵌入式大厂面经 5(持续更新中!)
这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!
1. include <> 和 include "" 的区别
搜索路径不同
<>
: 只在标准库目录搜索""
: 先在当前目录搜索,未找到再搜索标准库目录
使用场景
// 系统标准头文件 #include <stdio.h> #include <stdlib.h> // 自定义头文件 #include "myheader.h" #include "config.h"
2. 全局变量和局部变量的区别
主要区别
- 作用域全局变量:整个程序局部变量:声明它的函数或代码块内
- 生命周期全局变量:程序运行期间一直存在局部变量:函数或代码块执行期间
- 存储位置全局变量:数据段局部变量:栈区
示例代码:
int globalVar = 10; // 全局变量 void function1(void) { int localVar = 20; // 局部变量 printf("Local: %d, Global: %d\n", localVar, globalVar); } void function2(void) { int localVar = 30; // 不同的局部变量 globalVar = 40; // 可以修改全局变量 printf("Local: %d, Global: %d\n", localVar, globalVar); }
3. #define 和 typedef 的区别
主要区别
- 处理时机#define:预处理阶段的文本替换typedef:编译阶段的类型定义
- 作用范围#define:可以定义常量、表达式、函数等typedef:只能定义类型别名
- 编译检查#define:简单的文本替换,不做类型检查typedef:会进行类型检查
示例代码:
// #define 示例 #define MAX_SIZE 100 #define SQUARE(x) ((x) * (x)) #define PTR_INT int* // typedef 示例 typedef unsigned long ulong; typedef struct Point { int x; int y; } Point; typedef int* IntPtr; void testDefineTypedef(void) { // #define 使用 int array[MAX_SIZE]; int result = SQUARE(5); PTR_INT p1, p2; // p1是指针,p2是int // typedef 使用 ulong value = 1000UL; Point pt = {1, 2}; IntPtr p3, p4; // p3和p4都是指针 }
使用建议
- 对于常量定义,使用 #define
- 对于复杂类型定义,使用 typedef
- 对于函数指针等复杂声明,typedef 更清晰
- #define 用于条件编译和宏定义
这些概念在C语言中都非常基础和重要,正确理解和使用它们可以帮助我们写出更好的代码。
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。