【九月打卡】第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-04-26高性能表格工具VTable总体构成-icode9专业技术文章分享
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享
- 2024-04-14stopped 状态设置为变量,由外部传递进来-icode9专业技术文章分享
- 2024-04-14为什么ansible执行远程脚本需要放到后台-icode9专业技术文章分享