嵌入式大厂面经 5(持续更新中!)

这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!

1. include <> 和 include "" 的区别

搜索路径不同

  • <>: 只在标准库目录搜索
  • "": 先在当前目录搜索,未找到再搜索标准库目录

使用场景

// 系统标准头文件
#include <stdio.h>
#include <stdlib.h>

// 自定义头文件
#include "myheader.h"
#include "config.h"

2. 全局变量和局部变量的区别

主要区别

  1. 作用域全局变量:整个程序局部变量:声明它的函数或代码块内
  2. 生命周期全局变量:程序运行期间一直存在局部变量:函数或代码块执行期间
  3. 存储位置全局变量:数据段局部变量:栈区

示例代码:

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 的区别

主要区别

  1. 处理时机#define:预处理阶段的文本替换typedef:编译阶段的类型定义
  2. 作用范围#define:可以定义常量、表达式、函数等typedef:只能定义类型别名
  3. 编译检查#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都是指针
}

使用建议

  1. 对于常量定义,使用 #define
  2. 对于复杂类型定义,使用 typedef
  3. 对于函数指针等复杂声明,typedef 更清晰
  4. #define 用于条件编译和宏定义

这些概念在C语言中都非常基础和重要,正确理解和使用它们可以帮助我们写出更好的代码。

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务