黑马程序员---学习笔记13:宏定义

STM32F103RC学习(一) 阅读详情

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


被定义为宏的标识符称为 宏名,在编译预处理时对所有出现的宏名,都用宏定义中出现的字符串取代换,这称为宏定义或者宏展开。(代换后,代换部分优先级不会受影响,不会优先计算)

宏定义分为:有参数和无参数

格式:

#define 宏名 宏字符串(可以是常量,变量,表达式)
例:
#define M 10
#defin M1 y*y+3*y
注意:
预处理指令经常写在主函数之前。
宏定义不是一个语句,后面不需要加分号

宏替换:源程序在编译之前,由预处理程序对我们写的源代码进行处理:会把源代码中所有出现 宏名 的地方一律用 宏字符串 去替换。

注意事项:
1)宏名习惯性大写

2)宏定义的时候用宏名替换一个字符串,宏展开的时候用字符串替换宏名,这只是一种简单的代换,预处理程序对它不做任何的检查,如有错误,只能在编译已被宏展开后的源程序时发现。在字符串中出现法宏名不会被替换。

3)宏定义不是说明语句,行末尾不用加分号

4)宏定义必须写在函数之外,其作用域是宏定义命令起到源程序结束,如果要终止其作用域可以使用#undef命令

#define R 3
#define PAI 3.14
#define AREA PAI*R*R//嵌套使用

#define P struct Person //替换关键词
p {
Int age;
};

有参宏的定义和使用

带参宏的定义形式:
#define 宏名 (形参表) 字符串
#define M1(x,y) x*y+x+y
result =M1(4,5);
有参宏使用注意事项:
1)宏的形参之间可以出现空格,但是宏名和形参之间不能出空格,因为出现空格之后宏名和形参就会分开,形参被分到了替换的那一部分。
2)宏的形参是不需要定义类型的
有参宏定义时,各个值最好用括号括起来,这样做表达式替换的时候不易出错。
#define M1(x,y) (x)*(y)+(x)+(y)

3)宏定义多个语句
#define M3(m,n) m=a+2;n=a*2;(这里后面有分号,给语句加的)

typedef和#define的区别
1)
#define INT1 int*//宏定义(替换字符串)
typedef int* TINT;//替换别名

int num=10;
INT1 a,b;//相当于int * a,b;
//a是一个指针
a=#
//b是一个int型数
b=num;

TINT a1,b1;//相当于int* a1,int* b1;
//a1是一个指针
a1=#
//b1也是一个指针
b1=#

从这个例子可以看出,宏定义只是简单的字符替换,没有附带任何的功能。
但是替换操作(typedef),在使用别名时,作用会施加到所有的变量上!!!

宏定义只是简单的字符串替换,是预处理完成的,而typedef是在编译时处理的,它不是做简单的替换,而是对类型说明符重新命名,被命名的标识符具有类型定义说明的功能,施加到它后面的没有个变量。

GD-Link离线烧录全攻略:从配置到一键下载的保姆级教程 本文详细介绍了GD-Link离线烧录的全流程,从硬件准备到软件配置,再到一键下载的实战技巧。通过保姆级教程,帮助工程师快速掌握国产MCU的离线烧录技术,适用于产线批量烧录和现场设备维护等场景,显著提升工作效率。 阅读详情

相关推荐

不止是打字机效果:手把手教你用SpannableStringBuilder打造Android富文本AI对话界面

本文详细介绍了如何使用SpannableStringBuilder在Android平台上构建专业级AI对话界面,涵盖流式文本处理、富文本解析、交互优化等核心技术。通过实战代码示例,帮助开发者实现类似DeepSeek的AI产品交互效果,提升用户体验和应用专业度。

weixin_28358083的博客 199

bigloomy's blog

看到个C语言基础方面细致的blog, 特纪录下来学习。 http://blog.youkuaiyun.com/bigloomy   语言的预处理主要有三个方面: 1、文件的包含 2、宏定义 3、条件编译 一、文件包含的形式有下面两种 1、#include "文件名"

River的专栏 1948

基因家族的鉴定-基于Windows系统上的HMMER

基因家族的鉴定-基于Windows系统上的HMMER。

liangjinghui123的博客 3250

浅谈宏定义使用技巧

1、宏定义介绍          宏定义又称为宏替换,简称宏。它是在预处理阶段用预先定义的字符串替代标识符的过程。其定义的一般形式为:  #define    标识符    字符串        宏定义中的标识符都采用大写,这是编程中一种约定俗成的习惯。在了解如何使用宏定义之前,我们先来了解使用宏的过程中需要注意的几个要点。       1)宏替换不做语法检查,所以在使用的时候要格外小心。

轻飘飞扬 5731

深入AOSP构建系统:从BUILD_FINGERPRINT的生成逻辑,看如何定制你的Android设备标识

本文深入解析AOSP构建系统中的设备指纹生成机制,详细介绍了BUILD_FINGERPRINT的生成逻辑及其在Android设备中的关键作用。通过分析多个指纹属性的区别与联系,以及如何定制设备标识,帮助开发者更好地理解和掌握Android系统构建过程。

weixin_27017211的博客 221

保姆级教程:用GROMACS的FEP方法计算小分子结合自由能(附完整mdp配置)

本文提供了一份详细的GROMACS自由能微扰(FEP)计算教程,涵盖从系统准备、参数配置到结果分析的全流程。通过具体案例演示如何计算小分子结合自由能,包括λ窗口设计、动力学参数优化及并行化执行技巧,帮助研究者克服FEP计算中的常见问题,获得可靠的自由能数据。

weixin_30598225的博客 354

C语言宏的定义和宏的使用方法(#define)

1、宏的功能介绍 在 C 语言中,可以采用命令 #define 来定义宏。该命令允许把一个名称指定成任何所需的文本,例如一个常量值或者一条语句。在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉。 关于宏的一个常见应用就是,用它定义数值常量的名称: #define ARRAY_SIZE 100 double data[ARRAY...

diaochuanzhi7826的博客 1699

形位公差标注的常见误区与优化策略

本文深入解析机械设计中形位公差标注的常见误区与优化策略,特别针对NX2406用户提供实用技巧。从标注冗余、基准选择到公差值设定等五大误区入手,结合工程图实例展示如何提升标注精度与效率,帮助工程师避免常见错误,优化设计流程,确保零件功能实现与制造可行性。

info6的博客 245

如何利用#将宏定义中的参数插入到字符串中?

利用#将宏定义中的参数插入到字符串中

m0_72940975的博客 1701

【医学影像】Deep Learning for Automatic Pneumonia Detection

写在前面的话: 这篇论文是北美放射学会(RSNA)在Kaggle平台上托管的肺炎区域检测挑战赛取得第二名成绩的解决方案。因为笔者需要用到其中的图像增强方案,因此本篇博客只介绍了数据集和图像增强,关于模型的改进和其它改进点没有涉及。 论文地址:https://arxiv.org/abs/2005.13899 代码地址:https://github.com/tatigabru/kaggle-rsna 比赛地址:https://www.kaggle.com/c/rsna-pneumonia-detection-c

chenzhoujian_的博客 1567

OpenClaw与大语言模型(Claude/GPT/MiniMax)的集成架构与最优配置策略

摘要 本文探讨了OpenClaw框架与大语言模型(Claude/GPT/MiniMax)的集成架构与优化策略。大语言模型具有强大的自然语言处理能力,但集成面临API成本、响应延迟、上下文管理等挑战。OpenClaw采用分层架构设计,包括用户界面层、对话管理层、提示工程层、模型适配层和API调用层,支持多模型切换、智能对话管理和成本控制。系统通过模型适配层实现不同API的统一调用,并提供缓存、监控等优化机制。该集成方案能够充分发挥大语言模型的优势,为本地AI助理提供更智能的服务。

一键难忘的博客 1695

黑马程序员——iOS核心基础(13-14天)-黑马程序员-专题视频课程

C语言基础13-14天。其中包括预处理与结构体。

heima_cxy的博客 247

18. 从 SAP Fiori Elements List Report 中的图片显示,谈谈背后的 XML Template 设计机制

至此,Fiori Elements List Report 这个模版里,图片显示的原理,笔者已经从开发人员层面需要定义的注解,和 Fiori Elements 框架层面如何解析这些注解,这两方面做了深入介绍。从本文开始,我们从 Fiori Elements 预制的标准 XML Template 模版的设计,来介绍我们在最终 Fiori Elements 页面看到的产品图标,是如何渲染出来的。但是,List Report 里产品的图标显示,到底是上面这些 XML 文件里的哪一个里定义的呢?

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 607

【黑马程序员】【C语言】宏定义

1.宏定义可以分为2种: 不带参数的宏定义  带参数的宏定义 2.定义 一般形式 #define 宏名 字符串 比如  #define ABC 10 右边的字符串也可以省略,比如#define ABC 3.作用 它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。 接下来写个程序根据圆的半径计算周长 4.例子 在第

MarsII的iOS技术博客 333

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【黑马程序员】————预处理指令1-宏定义

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且...

aa123321621的博客 177

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【1024程序员节黑马键盘曝光】:揭秘年度最值得拥有的编程外设神器

auto-generated

SimSolve的博客 1928

黑马程序员—10-宏定义、枚举、typedef

-------android培训、java培训、期待与您交流! ---------- l预处理指令简介 uC语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 u为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 u预...

weixin_33950035的博客 135

黑马程序员 C++ 基础语法入门 学习记录

基础语法入门 文章目录一、初识C++1.2 编写项目1.3 运行程序1.4 注释1.5 变量1.6 常量1.7 关键字1.8 标识符命名规则二、数据类型2.1 整型2.2 sizeof关键字2.3 实型(浮点型)2.4 字符型2.5 转义字符2.6 字符串型2.7 布尔类型 bool2.8 数据的输入三、运算符3.1 算数运算符3.2 赋值运算符3.3 比较运算符3.4 逻辑运算符四、程序流程结构4.1 选择结构4.1.1 if 语句4.1.2 三目运算符4.1.3 switch语句4.2 循环结构4.2.

张时贰的博客 2993

黑马程序员-------预处理指令1-宏定义

预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3.预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能

qq_17714921的专栏 354

黑马程序员-预处理

预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3.预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令

cao4744的专栏 383

黑马程序员——C语言---预处理指令

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 预处理指令 1、基本概念     以“#”号开头的预处理命令。如包含命令#include,宏定义命令#define等。在源程序中这些命令都放在函数之外,而且一般都放在源程序文件的前面,它们称为预处理部分。     所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)

liuming_xing_cool的博客 808

黑马程序员——13-C语言之typedef

 一、作用 给已经存在的类型起一个新的名称 二、使用场合 (1)基本数据类型 typedef int MyInt; typedef MyInt MyInt2;   int a=10; MyInt b = 10; MyInt2 c = 20;   (2)指针 给指针类型char *起一个新的类型名称String,Str

yqlqt的专栏 416

【黑马程序员】————预处理指令2-文件编译

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 条件编译的概念 在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。 一、基本用法 1 #if 条件1 2 ...code1... 3 #elif 条件2 4 ...code...

aa123321621的博客 149

黑马程序员_C语言的一些总结

C语言总结 通过最开始的c语言学习,我渐渐了解编程是什么回事。编程不是你懂得语法就好,最重要的还是多敲,多实践,多用printf()函数判断中间过程是否正确。许多东西要经过翻书,上网查阅,搜索才会知道下一步要怎么编,当遇到一小点错误运行不出来,便会焦躁不安,虽然没有自暴自弃或者抱怨题目有些变态,可是会自信心受挫,想要攻破困难的心情会越来越处于主导地位,以下是我对C语言的总结: 一、常量 1.

yzyceo的专栏 705

黑马程序员1-4天视频总结

第一天总结 J2SE 标准版总结 java依靠自己独立的能解析java软件的解析器: java虚拟机实现的跨平台性,但是java虚拟机也是一个软件, 虚拟机调用到系统底层的东西,本身不能跨平台, 就是说在xp,Linux,mac要用到专有的java虚拟机。 设置java环境变量 JRE(Java Runtime Envionment Java运行环境,包含虚拟机) JDK(Ja

RaWsm的专栏 2086

黑马程序员——Foundation基础篇

------Java培训、Android培训、iOS培训、.Net培训 期待与您交流! ------- 本篇讲述的是Foundation框架的一些常用的结构体和常用类。 2.集合类

liufeng124的专栏 855
上一篇: 黑马程序员---学习笔记12:typedef关键字
下一篇: 黑马程序员---学习笔记14:OC基础(1)
七分热度_HD
博客等级 码龄14年 12粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值