尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
嵌入式学习篇之预处理命令
一、预处理命令:所有的预处理命令 都 以 # 开头例 #include stdio.h //预处理命令C提供的预处理功能主要有以下3种宏定义文件包含条件编译二、编译例gcc hello.c //编译实际的编译过程:1、预处理:将程序中的预处理命令执行完将代码处理成 纯的C语言代码例如gcc -E hello.c -o hello.i2、编译:将预处理完的文件进行语法词法分析检查问题生成 一份 汇编代码例如gcc -S hello.i -o hello.s3、汇编:将 前面的汇编代码最终翻译成机器代码例如gcc -c hello.s -o hello.o4、链接:将用到的第三方代码 链接(拼接)成为 最终可执行程序例如gcc hello.o -o hello三、宏定义1、#define 标识符 字符串#define 宏名 宏值作用:用宏名代替 一串文本信息注意:宏名 --本质还是一个标识符宏名 建议 大写宏名 --符号常量用了一个 符号(宏名) 代替 常量值宏工作的本质文本原样替换但是:代码中出现在 “” //字符串中的 宏名 不会被替换用途可以用宏名 来代替一些常量符号常量好处可以做到一改全改可以提高代码可读性#define ARRAY_SIZE 10int array[ARRAY_SIZE]eg:#define N 10练习计算一下 圆的周长和面积从键盘输入一个半径2、带参宏:#define 宏名(参数表) 宏值1.带参宏 可以 给一些参数形式 特别像函数调用宏函数2.带参宏 和 函数有本质的区别a.函数的参数 是带类型的b.带参宏 参数没有类型 --就是文本c.函数什么时候可以用程序运行之后d.带参宏在预处理阶段就处理完了3.带参宏 工作过程本质上还是文本原样替换参数是一一对应的4.带参宏副作用建议能加括号都加括号可能会改变我们建议都加括号5.所有宏定义是以 换行 ‘\n’作为结束符练习1、两个数相乘错误示范#define MUL(a,b) abMUL(12,34) 1234正确示范#define MUL(a,b) ((a)*(b))2、实现一个宏找出两个数的最大值四、文件包含:#include 文件名 //默认到系统的标准路径下寻找要包含的头文件#include “文件名” //双引号 默认先到当前位置下 寻找要包含的头文件如果找到则包含进来// 如果没找到才到系统的标准路径下寻找#include stdio.h说明:include 这个预处理命令执行之后用文件中的内容 替换这个 命令所在位置将来使用 //如果是系统的相关头文件 — 用 “” //如果是自己写的 一般用 “”五、条件编译:1:1#if 0程序行#endif2#ifdef 标识符程序段1#else程序段2#endif语义:判断 标识符 是否定义了如果定义了 —真选择 程序段1如果没定义 —假选择 程序段23#ifdef 标识符程序段1#endif满足条件的时候 添加 程序段1不满足条件时候啥都没有4#ifndef 标识符程序段1#else程序段2#endif语义:没有定义 标识符 则选择程序段1有定义 标识符 则选择程序段25#if 表达式程序段1#else程序段2#endif6#if 表达式程序段#endif2:用途:可以用来实现 多文件编程3:注意(1)printf //系统里面的函数 需要#include stdio.h实现好的功能 .c 独立的c程序提供 或者 打包成库文件.c //写好了功能的点c文件.c 对应 有一个 .h (头文件).c — 就是实现功能的具体代码 —函数.h — 头文件 --放的是 自身需要用到 宏 类型说明 函数声明 //变量的定义 不能放头文件(2)int a 10; //a一定得开空间extern int a; //声明a在其他变量中有定义了无需自己再定义(3)说明:头文件包含注意 — 一定要写#ifndef 头文件名 //要大写 前后 下划线#define 头文件名#endif(4)快捷键命令:vsp //竖着分屏sp窗口之间切换:ctrl 两下w编译:所有 .c 一起编译gcc main.c isLeapYear.c getAllDays.c …//这些需要一起编译
RELATED

相关推荐

C++ STL:list 底层结构、模拟实现与 vector 对比

C++ STL:list 底层结构、模拟实现与 vector 对比

1. list 的介绍 list 是 STL 中非常重要的序列式容器之一,它可以在常数时间 O(1) 内在任意位置进行插入和删除元素。 list 的底层结构是带头结点的双向循环链表: 每个节点包含一个数据域 data、一个前驱指针 prev 和一个后继指针 next;头结…

📅 2026/9/30 9:27:13
多人Vibe Coding秒变灾难?泳道隔离机制与Git预检脚本:团队多Agent协作防撞车实战

多人Vibe Coding秒变灾难?泳道隔离机制与Git预检脚本:团队多Agent协作防撞车实战

文章目录1. 团队协作的公地悲剧:为什么多 Agent 协同秒变合并灾难?1.1. 一行代码引发的惨案:公共基础配置被静默覆写1.2. 为什么 AI 偏爱跨目录越权?概率模型的边界盲区2. 崩溃现场还原:Git Merge 冲突爆炸与 CI 构建流…

📅 2026/9/30 9:27:13
大模型长任务总是半途跑题?基于外置状态机与量化风格卡的长链路Agent编排实战

大模型长任务总是半途跑题?基于外置状态机与量化风格卡的长链路Agent编排实战

文章目录1. 长链路编排的达摩克利斯之剑:AI 为什么总是“半途而废”?1.1. 模式一:主旨漂移与长上下文遗忘1.2. 模式二:跳步偷工减料与幻觉伪造1.3. 模式三:风格塌房与空洞 AI 味泛滥2. 崩溃现场还原:长对话…

📅 2026/9/30 9:27:13
MORE NEWS

更多资讯

📰

支持向量机从原理到实战:SVM的Python实现与参数调优全解析

简介:一份面向机器学习入门者与Python开发者的支持向量机(SVM)Python实现资源,以精简可运行的代码和配套数据,直观展示SVM从数据到分类模型的学习过程。压缩包共6个文件,其中3个Python源码文件分别承担核心…

📰

ClickHouse JSON处理实战:从JSON类型到行列转换全解析

搞数据的人一定都有这种感受:业务方扔过来的数据,十个里有八个长着 JSON 的样。ClickHouse 又是出了名的强类型列存,两者一撞,第一个反应就是拿 String 硬存,再掏出 JSONExtract 系列函数一层层剥。我之前在项目里处理…

📰

视觉惯性组合导航从原理到实践:无人系统开发验证平台搭建指南

如果你最近在搞无人机、机器人或者车载平台,你应该会注意到一个趋势:以前大家做自主定位,首选RTK、激光雷达或者纯视觉方案,但现在越来越多的团队开始把“视觉 惯性”作为标配,也就是视觉惯性组合导航。我做这个方向也…

📰

jevgrep 解析黑科技:WASM 辅助 worker 如何高效提取 Python/TypeScript 声明与调用链

jevgrep 解析黑科技:WASM 辅助 worker 如何高效提取 Python/TypeScript 声明与调用链 【免费下载链接】jevgrep Find code by asking what it does. A CLI for coding agents that uses Jev to discover relevant files and source context. 项目地址: https://gi…

📰

华为Mate 90系列官宣10月1日发布开售!外观拼接设计,带外接摄影配件!

据华为官方消息,华为Mate 90系列年度旗舰手机已正式定档,将于10月1日上午10:00正式发布,并于同日12:08全渠道同步开售。华为终端官方宣布了上述信息,并同步公开了Mate 90 Pro Max典藏版手机的官方图片,新机回归双拼设计…

📰

UE5.8渲染调试指南:从光线、采样到性能优化实战

UE5.8 的渲染体系已经和过去完全不同了。几年前做项目还要手动摆放反射球、烘焙光照贴图、给模型做一堆LOD,现在打开引擎,Nanite承担几何体细节,Lumen负责动态全局光照,虚拟阴影贴图按需分配分辨率,TSR还能用低分辨率重…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬