嵌入式开发学习日志(c语言预处理及指针入门) day12 持续更新中

发布时间:2026/8/4 6:28:14

嵌入式开发学习日志(c语言预处理及指针入门) day12 持续更新中
一、GCC 编译的四个完整步骤我们在终端输入一条gcc main.c -o a.out命令时背后其实经历了 4 个独立的阶段。理解这个过程对排查编译错误如之前的stray \357编码错误非常有帮助。阶段指令参数输入文件输出文件主要工作1. 预处理-E.c.i展开头文件#include、宏替换#define、处理条件编译2. 编译-S.i.s将 C 代码翻译为汇编指令3. 汇编-c.s.o将汇编指令转为二进制机器码4. 链接(无).o可执行文件链接系统库函数合并目标文件实操顺序.c→.i→.s→.o→可执行程序二、预处理命令预处理在编译之前执行本质是文本替换不进行语法运算。1. 宏定义#define(1) 无参宏符号常量#define PI 3.1415(2) 带参宏宏函数#define ADD(a,b) ((a)(b)) #define MAX(a,b) ((a)(b)?(a):(b)) #define AREA(r) ((PI)*(r)*(r))✅ 宏书写重要规范文本替换宏仅仅是文本替换运行前展开。括号保护表达式参数全部加括号防止运算符优先级出错。命名规范宏标识符建议大写宏末尾不要加分号。 宏 VS 普通函数宏预处理阶段替换代码副本增多程序体积变大无函数调用开销。函数运行时调用需要保护/恢复现场存在调用开销。2. 头文件包含#include#include stdio.h尖括号。系统头文件编译器去系统路径如/usr/include查找。#include head.h双引号。自定义头文件优先在当前项目目录查找。头文件内一般存放其他头文件、类型声明、宏定义、函数声明、全局变量声明。3. 条件编译根据宏是否定义、表达式真假选择性编译部分代码。#if 表达式 ... #endif表达式为真则编译。常用于#if 0注释大块代码。#ifdef 宏名如果宏已定义编译对应代码常用于调试信息输出。#ifndef 宏名如果没有定义该宏则编译代码。最经典用途头文件防止重复包含。#ifndef __HEAD_H__ #define __HEAD_H__ // 头文件内容 #endif三、指针1. 基础概念内存程序运行可用存储空间以字节为单位编号。地址内存字节的编号。指针即内存地址。指针变量专门用来存放地址的变量。2. 指针变量定义与大小格式基类型 *指针名;int *pint; char *pch;基类型代表指针指向空间的数据类型。*标识该变量是指针。指针大小64 位系统所有指针占用8 字节32 位系统指针占用4 字节。3. 初始化与野指针int num 100; int *p NULL; // 1. 初始化为空指针推荐 int *p num; // 2. 定义同时赋值 p num; // 3. 赋值让指针指向 num⚠️ 野指针未初始化、或者指向已经释放内存的指针。规避方案指针初始化为NULL或赋值合法变量地址。4. 两个核心运算符运算符名称作用示例取地址获取变量首字节地址p num;(修改指针指向)*解引用访问指针指向内存中的数据*p 666;(修改指向空间的值)极易混淆区分p num;→ 修改指针本身让指针指向 num。*p num;→ 修改指针指向空间的数据指针指向不变。5. 指针算术运算允许运算、-、、--。*、/、%对指针无意义。指针 ± 整数向前/向后偏移若干个元素不是字节char *pc; pc1;// 向后偏移 1 字节int *pi; pi1;// 向后偏移 4 字节 (假设 int 为 4 字节)指针 - 指针前提同类型、指向同一块连续内存数组。结果两个地址之间相隔的元素个数。公式(地址差值) / sizeof(基类型)比较大小指针可以使用 !比较。6. 指针作函数参数修改变量值想要在函数内修改主函数变量的值必须传递变量地址指针传递。仅读取可以传值也可以传地址。多返回值使用指针参数带回结果。四、指针与一维数组数组名a等价于a[0]代表数组首元素地址。数组名是地址常量不能赋值如a xxx;非法。下标与指针等价a[0]*aa[1]*(a1)a[n]*(an)函数形参void print_array(int a[], int len); // 写法1 void print_array(int *pa, int len); // 写法2 (本质相同)数组传参本质是传递数组首元素地址退化为指针。五、易错点汇总宏末尾不要加分号带参宏所有参数必须包裹括号。头文件#ifndef用于防止重复包含。赋值pnum改指向和*pnum改值含义完全不同。指针减法两个指针相减得到的是元素个数不是字节差值。偏移量指针运算偏移单位由基类型决定。数组名是常量不能被赋值。崩溃原因使用未初始化指针野指针会导致程序崩溃。

相关新闻

平板坡口机支持哪些坡口形式?V型、U型、J型一次揭秘!

平板坡口机支持哪些坡口形式?V型、U型、J型一次揭秘!

2026/8/4 6:28:14

在工业制造领域,从事金属加工、焊接工程等工作的工程师、技术人员和企业主们,在平板坡口机选型上常常踩坑。不少人花费大量资金购买了坡口机,却发现加工效率低下,无法满足生产需求;或者加工精度不达标,导致…

国内主流的 AI Agent 平台有哪些?2026年企业级智能体平台选型指南

国内主流的 AI Agent 平台有哪些?2026年企业级智能体平台选型指南

2026/8/4 6:18:14

2026年,企业级AI智能体市场迎来爆发期。本文从平台定位、核心能力、落地场景三个维度,系统梳理国内主流的AI Agent平台,帮助企业做出科学选型决策。一、2026年AI Agent市场全景据科智咨询数据,中国企业级AI智能体市场规模从2024年…

第五届国际绿色零碳节暨ESG领袖峰会上海举办 共启可持续新征程

第五届国际绿色零碳节暨ESG领袖峰会上海举办 共启可持续新征程

2026/8/4 6:18:14

7月29日,由数央网、数央公益联合国内众媒体共同举办的第五届国际绿色零碳节暨2026 ESG领袖峰会在上海圆满举办,活动主题为:践行绿色发展,共赴零碳未来。本届零碳节暨ESG峰会以更开放的姿态、更丰富的维度,打造绿色领域…

Unity内存碎片化诊断与优化:从原理到实践的全面解决方案

Unity内存碎片化诊断与优化:从原理到实践的全面解决方案

2026/8/4 7:38:17

1. 项目概述:当Unity项目变成“内存沼泽” 如果你在Unity开发中遇到过这样的场景:游戏运行一段时间后,帧率开始毫无征兆地下降,加载新场景时卡顿感越来越强,甚至在移动设备上玩着玩着就闪退了。你打开Profiler&#xf…

AI辅助PPT制作:从提示词工程到高效工作流的实战指南

AI辅助PPT制作:从提示词工程到高效工作流的实战指南

2026/8/4 7:38:17

1. 从“一键生成”到“两步精修”:我的PPT制作思路升级最近在折腾各种AI工具,发现一个挺有意思的现象:很多人一提到“AI做PPT”,第一反应就是找个工具,输入主题,然后坐等一个完美的幻灯片从天而降。我一开始…

Linux C语言网络编程:从Socket到epoll的并发服务器实战

Linux C语言网络编程:从Socket到epoll的并发服务器实战

2026/8/4 7:38:17

1. 项目概述:为什么要在Linux下用C语言搞网络编程? 如果你是一个C语言开发者,或者正在学习系统编程,那么“网络编程”这个领域迟早会和你碰面。而Linux环境,几乎是这个领域最经典、最硬核的“练功房”。为什么这么说&a…

Android SO库混淆实战:基于OLLVM的代码保护与逆向对抗

Android SO库混淆实战:基于OLLVM的代码保护与逆向对抗

2026/8/4 7:38:17

1. 项目概述:为什么要在Android SO库上动“混淆”的念头?如果你是一名Android NDK开发者,或者你的应用里用到了核心算法、加密逻辑等需要保护的关键代码,那么“SO库被逆向”绝对是一个让你夜不能寐的噩梦。.so文件,也就…

为什么你的企业正在被全网“隐性屏蔽”?打破工业思维的增长真相 | 盈小蚁洞察

为什么你的企业正在被全网“隐性屏蔽”?打破工业思维的增长真相 | 盈小蚁洞察

2026/8/4 7:38:17

核心导读 (TL;DR): 当前绝大多数 B2B 企业正陷入线索成本极高、流量门可罗雀的“获客荒”。这并非市场萎缩,而是企业的营销底座与当下的算法分发机制产生了严重的维度落差。盈小蚁行业研究团队发现,当领先者早已依托意图嗅探与全链路自动化完…

Python+OpenCV人脸识别实战:从环境搭建到照片自动分类

Python+OpenCV人脸识别实战:从环境搭建到照片自动分类

2026/8/4 7:28:17

你有没有试过,在几百张照片里手动找某个人的照片?或者,想给自己的家庭相册自动按人脸分类,却不知道从何下手?又或者,只是单纯好奇,那些看似高大上的“人脸识别”技术,自己能不能用几…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/3 4:49:52

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/3 19:24:18

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/3 20:38:37

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案

2026/8/4 0:07:58

3步解决Windows DLL缺失问题:VisualCppRedist AIO终极运行库修复方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在打开游戏或软件时遇…

SingleFile终极指南:一键保存完整网页的5大核心功能

SingleFile终极指南:一键保存完整网页的5大核心功能

2026/8/4 0:07:58

SingleFile终极指南:一键保存完整网页的5大核心功能 【免费下载链接】SingleFile Web Extension for saving a faithful copy of a complete web page in a single HTML file 项目地址: https://gitcode.com/gh_mirrors/si/SingleFile 你是否曾经遇到过这样的…

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材

2026/8/4 0:07:58

国家中小学智慧教育平台电子课本下载终极方案:三步免费获取PDF教材 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/2 17:06:42

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/3 7:25:44

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/3 2:41:27

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…