【九月打卡】第19天【养成记】嵌入式挑战第19天,C语言高级进阶:语言宏定义的使用
2022/9/26 3:17:22
本文主要是介绍【九月打卡】第19天【养成记】嵌入式挑战第19天,C语言高级进阶:语言宏定义的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
课程章节:
课程名称:物联网/嵌入式工程师
章节名称:第5周之第四讲 1-1 至 1-2 C语言高级进阶:语言宏定义的使用
讲师姓名:大白老师
课程内容:
C语言高级进阶:语言宏定义的使用
宏定义
简介
格式: #define 宏名 常量 功能:宏名代替常量,做到见名知意
示例用法
#define MAX 100 说明: (1)表示MAX这个符号标识的值是100 (2)编译器会将宏替换成宏后面的内容
宏函数
简介
#define 宏函数名(参数1,参数2) 表达式 特点:宏都是原样替换
示例用法
#define M 10 #define CALC(x) (x * x) int main() { printf("M = %d\n",M); printf("Result = %d\n", CALC(M + M)); return 0; }
分析
可通过-E参数查看编译器的处理方式 : gcc -E xx.c -o xx.i
M = 10 Result = 120
执行结果
示例用法
嵌入式开发常用宏操作 do…while(0)
我们来看一个简单的例子: void print_demo_first() { printf("demo first\n"); } void print_demo_second() { printf("demo second\n"); } void print_demo_third() { printf("demo second\n"); } #define TEST() printDemo1();printDemo2(); int main() { TEST(); //单独使用无任何副作用; return 0; }
改变代码架构,若是存在if…else语句调用则会出错。
解决方案: s使用do…while语句防止编译出错。
注:宏定义种do…while的while后面不能加;
#include <stdio.h> void print_demo_first() { printf("demo first\n"); } void print_demo_second() { printf("demo second\n"); } void print_demo_third() { printf("demo second\n"); } //#define TEST() print_demo_first();print_demo_second(); #define TEST() do{ \ print_demo_first(); \ print_demo_second();\ }while(0) int main() { int n = 0; printf("please input a data : "); scanf("%d",&n); if(n % 2 == 0) TEST(); else print_demo_third(); return 0; }
字符串化运算符#
简介
#我们常称为字符串化运算符,因为它会把宏调用时的实参转换为字符串。 示例: #define FUN(x) printf(#x "= %d\n",x) FUN(4 + 2) 输出结果: 4 + 2 = 6
示例用法:
#include <stdio.h> #define STR(x) #x #define NUM 10 int main() { printf("%s\n",STR(3)); printf("%s\n",STR(NUM)); return 0; }
学习笔记:
不定参数宏
简介
C99标准中规定允许用户定义有省略号的宏,省略号必须放在参数列表的后面,以表示可选参数。 你可以用可选参数来调用这类宏。在代码中用...代表。他们被保存到__VA_ARGS__中. _VA_ARGS__ : 用于在宏替换部分中,表示可变参数列表;
代码示例
#include <stdio.h> #define LOG(...) printf(__VA_ARGS__) #define LOGSTR(fm,...) printf(fm,__VA_ARGS__); int main() { LOG("This Time is %d o'clock\n",9); LOG("This TIme is %d:%d:%d\n",18,12,23); LOGSTR("data = %d%s\n",100,"RMB"); return 0; }
运行结果
课后任务
练习
写一个宏获取两个数中较大的值。 #define MAX_VALUE(x,y) xxx 例如: int a = 10; int b = 20; int max;
课程评价:
通过学习语言宏定义的使用,了解到了行业中的编码规范,使编程更具有工程化和语义化。
这篇关于【九月打卡】第19天【养成记】嵌入式挑战第19天,C语言高级进阶:语言宏定义的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升