[ios]宏定义

这个不是Ios 应该算是C里面的

http://baike.baidu.com/view/2076445.htm

宏定义

 

 

 

宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。[1]

编辑本段参数

 

不带参数

宏定义又称为宏代换、宏替换,简称“宏”。

格式:

#define标识符字符串

其中的标识符就是所谓的符号常量,也称为“宏名”。

预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。

掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。

即在对相关命令或语句的含义和功能作具体分析之前就要换:

例:

#definePI3.1415926

把程序中出现的PI全部换成3.1415926

说明:

(1)宏名一般用大写

(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义

(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。

(4)宏定义末尾不加分号;

(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。

(6)可以用#undef命令终止宏定义的作用域

(7)宏定义允许嵌套

(8)字符串" "中永远不包含宏

(9)宏定义不分配内存,变量定义分配内存。

(10)宏定义不存在类型问题,它的参数也是无类型的。[2]

带参数

除了一般的字符串替换,还要做参数代换

格式:

#define宏名(参数表) 字符串

例如:#defineS(a,b) a*b

area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;

类似于函数调用,有一个哑实结合的过程:

(1)实参如果是表达式容易出问题

#defineS(r) r*r

area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;

正确的宏定义是#defineS(r) ((r)*(r))

(2)宏名和参数的括号间不能有空格

(3)宏替换只作替换,不做计算,不做表达式求解

(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存

(5)宏的哑实结合不存在类型,也没有类型转换。

(6)函数只有一个返回值,利用宏则可以设法得到多个值

(7)宏展开使源程序变长,函数调用不会

(8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)[3]

编辑本段冷门重点

 

#define用法

1、 用无参宏定义一个简单的常量

#defineLEN 12

这个是最常见的用法,但也会出错。

比如下面几个知识点你会吗?可以看下:

(1)#defineNAME "zhangyuncong"

程序中有"NAME"则,它会不会被替换呢?

(2)#define0x abcd

可以吗?也就是说,可不可以用不是标识符的字母替换成别的东西?

(3)#defineNAME "zhang

这个可以吗?

(4)#defineNAME "zhangyuncong"

程序中有上面的宏定义,并且,程序里有句:

NAMELIST这样,会不会被替换成"zhangyuncong"LIST

四个题答案都是十分明确的。

第一个,""内的东西不会被宏替换。这一点应该大都知道。

第二个,宏定义前面的那个必须是合法的用户标识符

第三个,宏定义也不是说后面东西随便写,不能把字符串的两个""拆开。

第四个:只替换标识符,不替换别的东西。NAMELIST整体是个标识符,而没有NAME标识符,所以不替换。

也就是说,这种情况下记住:#define第一位置第二位置

(1) 不替换程序中字符串里的东西。

(2) 第一位置只能是合法的标识符(可以是关键字)

(3) 第二位置如果有字符串,必须把""配对。

(4) 只替换与第一位置完全相同的标识符

还有就是老生常谈的话:记住这是简单的替换而已,不要在中间计算结果,一定要替换出表达式之后再算。

2、 带参宏一般用法

比如#defineMAX(a,b) ((a)>(b)?(a):(b))

则遇到MAX(1+2,value)则会把它替换成:

((1+2)>(value)?(1+2):(value))

注意事项和无参宏差不多。

但还是应注意

#defineFUN(a) "a"

则,输入FUN(345)会被替换成什么?

其实,如果这么写,无论宏的实参是什么,都不会影响其被替换成"a"的命运。

也就是说,""内的字符不被当成形参,即使它和一模一样。

那么,你会问了,我要是想让这里输入FUN(345)它就替换成"345"该怎么实现呢?

请看下面关于#的用法

3、 有参宏定义中#的用法

#defineSTR(str) #str

#用于把宏定义中的参数两端加上字符串的""

比如,这里STR(my#name)会被替换成"my#name"

一般由任意字符都可以做形参,但以下情况会出错:

STR())这样,编译器不会把“)”当成STR()的参数。

STR(,)同上,编译器不会把“,”当成STR的参数。

STR(A,B)如果实参过多,则编译器会把多余的参数舍去。(VC++2008为例)

STR((A,B))会被解读为实参为:(A,B),而不是被解读为两个实参,第一个是(A第二个是B)。

4、 有参宏定义中##的用法

#defineWIDE(str) L##str

则会将形参str的前面加上L

比如:WIDE("abc")就会被替换成L"abc"

如果有#defineFUN(a,b) vo##a##b()

那么FUN(id ma,in)会被替换成void main()

5、 多行宏定义:

#definedoit(m,n) for(int i=0;i<(n);++i)\

{\

m+=i;\

}

三、使用HM进行简单的视频隐写demo 三、使用HM进行简单的视频隐写前言一、实验环境二、实验思路三、实验过程3.1 提取原始载体3.2 使用LSB隐写算法进行隐写3.3 放回含密载体3.4 提取含密载体3.5 使用LSB提取算法进行比对四、碰到的问题以及解决思路4.1 块的结构体发生变化4.1.1 产生的原因4.1.2 解决方法4.2 一个有趣的现象4.2.1 产生的原因4.3 视频产生较大失真4.3.1 产生的原因4.3.2 解决方法五、总结 前言 在前两篇博客中介绍了基于HEVC/H.265视频编解码器的视频隐写的基本思路,本文将详细记录 阅读详情

相关推荐

HFSS仿真平行线定向耦合器学习笔记

材料:FR4(玻璃纤维环氧树脂),介电常数:4.4,损耗角正切:0.02,厚度0.8mm。扫频方式:快速扫频,扫频范围:1.0GHz~3.0GHz,步进:0.01GHz。端口2是端口1关于Y轴对称,端口3,端口4是端口1和端口2关于X轴对称得到。求解中心频率:2.0GHz,迭代次数:20,收敛误差为0.02。右键设置边界条件----辐射边界。激励方式:集总端口激励。

qq_36521926的博客 4486

宏定义

宏定义 宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译 1.不带参数的宏定义: 宏定义又称为宏代换、宏替换,简称“宏”。 格式: #define标识符 字符串 其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。 掌握"宏"概念的关键是“换”。一切以换为前提、做任何...

weixin_34160277的博客 1105

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2764

宏

宏定义又称为宏代换、宏替换,简称“宏 格式: #define 标识符(大写) 字符串 其中标识符就是所谓的符号常量,也称为“宏名”。

王洋的博客 3089

带挂牵引车倒车运动模型推导及仿真实现

半挂牵引车在倒车时,由于鞍座主销的连接限制,其运动方式与乘用车有显著差异。例如,乘用车在右侧倒车入库时,只需确定泊车起点并将方向盘向右打死。相反,牵引车在倒车时需要先向左转方向盘,当铰接角达到防折叠的临界值时,再将方向盘向右转回,以调整牵引车与挂车至直线状态,完成泊车入库。本研究旨在建立一个基于牵引车带挂车倒车运动学模型,该模型基于以下假设: 道路在车辆行驶过程中保持平坦,无凹凸不平; 车辆以低速行驶,且在运行过程中车身不发生侧倾或俯仰; 行驶过程中,轮胎无变形,无侧向滑动,且不产

jianmo的博客 2697

手把手教你用Kali Linux搭建vulntarget-a靶场环境(附详细配置步骤)

本文详细介绍了如何在Kali Linux环境下搭建vulntarget漏洞靶场,包括环境规划、虚拟化平台配置、靶机系统部署及安全工具链配置等关键步骤。通过实战演练,帮助网络安全从业者和初学者掌握专业级漏洞实验平台的搭建与管理技巧,提升安全测试能力。

weixin_29279101的博客 107

【C/C++】#define宏替换高级用法

传参数的宏替换 二、宏替换不会做表达的运算 三、宏替换多行—反斜杠连接 四、#undef取消宏替换 五、宏替换转字符串、拼接等用法 六、宏替换的优缺点宏替换的优点: 便于维护,提高代码的可读性 由于宏替换将代码片段在预处理期替换,可以提高程序的执行效率 宏替换的缺点: 没有安全类型的检查 宏定义在部分代码中可能不直观,可能不方便调试 宏替换不会运算求解

努力让自己的能力配得上梦想. 3841

PCL 三维重建 泊松曲面重建算法

本文介绍了基于泊松曲面重建算法的三维重建过程。泊松重建是一种利用点云数据生成三维表面的算法,它基于点云的法线估计和泊松方程的求解,能够生成光滑且连续的曲面模型。该方法适用于复杂形状和细节的表面重建。

纵马踏花向自由 1089

【转载】C++ 宏定义

一、#define的基本用法#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1.1 #define的概念#d

少年~学习啦 826

34 python 时间和日期

介绍python里时间和日期的常用方法,以及案例,还有注意事项。

水滴爬呀爬 347

Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)

自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-优快云博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-优快云博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-优快云博客_qt实现好看侧边栏。...

抵抗时间扭曲,坚持做一件有意义的事 2万+

C语言中,宏替换的替换规则

:https://zhidao.baidu.com/question/333406508.html a:tattackor 简单来说:宏定义又称为宏代换、宏替换,简称“宏”。是C提供的三种预处理功能的其中一种。 复杂的请看下面,讲的很全。下面的带参宏定义,多行宏定义,在Linux内核源码中很多。另外sizeof也是一个宏定义。 宏定义 宏定义是C提供的三种预处理功能的其中一种,这三种预...

qq_34352738的博客 3万+

高通SDX35平台 modem启动异常分析

SDX35 MIFI项目在生产时出现modem反复重启问题。经排查发现是modem在初始化GNSS模块时访问了不存在的硬件地址导致崩溃,原因是产线使用的SDX35 000-AB型号芯片阉割了GNSS功能,而本地测试使用的AA型号支持该功能。解决方案是通过修改modem编译选项,采用高通新提供的genlmm2选项(保留IMS和SMS功能但去除GNSS支持),最终解决了启动异常问题并满足VZW认证需求。

四儿家的小祖宗的博客 273

IOS 宏定义

看喵神的宏定义的黑魔法学到了很多,在这里总结下。 一、单个“#”的使用 单个“#”表示将后面紧接的参数变成 C 字符串,如 : #define Name(pro) @#pro - (void)testName {    NSLog(@"|%@|",Name(self.dataArray));}2015-10-20 11:34:45.691 Shadow[1878:71990

一只叫花花的猪的专栏 1104

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

iOS几种宏定义

不带参数 //获取底部安全区域高度(主要针对iPhoneX等设备) //safeAreaInsets 该方法iOS 11之后新加入的接口 #define BottomSaveHeight [[[UIApplication sharedApplication] delegate] window].safeAreaInsets.bottom 带参数 // 弱引用自身 block中调用自身需要...

u011248221的博客 630

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[iOS]一些宏定义

#ifndef PrefixHeader_pch #define PrefixHeader_pch // 屏幕的宽 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width // 屏幕的高 #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height // AppDe...

Gamin 546

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

iOS常用宏定义大全

iOS常用宏定义大全OC版宏定义与常量的区别宏:只是在预处理器里进行文本替换,不做任何类型检查,宏能定义代码,const不能,多个宏编译时间相对较长,影响开发效率,调试过慢,const只会编译一次,缩短编译时间。 所以在使用的时候,最好把代码和一些基本数据类型如int抽成宏。 而对于常量字符串使用const,苹果也是这样使用的。下面总结一下一些常用的宏定义。1.获取屏幕宽度与高度#define

Bruce_pac的博客 2937

iOS 宏定义

在项目中经常用到的一些宏定义,我基本都是将宏分成几个部分,尺寸宏、系统宏、文字宏、工具类宏、定义沙盒目录文件的宏、通知Notification相关的宏、服务端API接口的宏,还有一个管理的宏。 1、定义尺寸类的宏 #ifndef DimensMacros_h #define DimensMacros_h //状态栏高度 #define STAT

1079

iOS宏定义

1.宏定义需要加括号的两种情况: (1)如果宏的替换列表中带有运算符,那么使用要将替换列表放到括号中。例如#define MAX_VALUE(X,Y) ((X) &gt; (Y) ? (X) : (Y)) (2)如果宏有参数,每次参数在替换列表中出现时都要放在括号中。同上 #define MAX_VALUE(X,Y) ((X) &gt; (Y) ? (X) : (Y))// 求两个...

九天揽月 1652

IOS常用的宏定义

作为一名iOS开发者,灵活运用宏定义方法是必不可少的啦!#pragma mark —---Color set----#define RGBA(R/*红*/, G/*绿*/, B/*蓝*/, A/*透明*/) \[UIColor colorWithRed:R/255.f green:G/255.f blue:B/255.f alpha:A]/** 屏幕宽*/#define kScreenWidth ...

YuanZcc的博客 252

iOS 常用的宏定义

屏幕尺寸 #definekScreenWidth[UIScreen mainScreen].bounds.size.width #definekScreenHeight[UIScreen mainScreen].bounds.size.height 手机型号 #define kISiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfa...

qq_30356665的博客 369

玩转iOS“宏定义”

此文转载自:https://my.oschina.net/u/2340880/blog/3357392 LiteOS Studio图形化调测能力,物联网打工人必备!>>> 玩转iOS“宏定义” 宏定义在C类语言中非常重要,因为宏是一种预编译时的功能,因此其可以比运行时更高层面的对程序流程进行控制。在初学宏定义的时候,大家可能都会有这样一种感觉:就是完...

Python研究所 579

IOS开发中常用的宏定义

有些时候,我们需要将代码简洁化,这样便于读代码。我们可以将一些不变的东东抽取出来,将变化的东西作为参数。定义为宏,这样在写的时候就简单多了。 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操作系统是不是ios7 #define IOS7 ( [[[UIDevice currentDevice].systemVersion doubleValue] >= 7.0] )

移动开发的专栏 1411

iOS开发常用宏定义

//获取屏幕 宽度、高度 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height) // 根据版本号导入文件#ifdef NSFoundationVers...

ZHANGBO9477的博客 173

iOS中常用的宏定义总结

这篇文章主要给大家介绍了关于iOS中常用的宏定义的相关资料,例如UI元素、Log、系统、颜色类等等的示例代码,文中介绍地方非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧 前言 宏定义在C系开发中可以说占有举足轻重的作用,为了简化开发流程,提升工作效率,收集了一些平时常用的宏定义...

choudingwan5091的博客 158

iOS 单例宏定义记录

MYSingleton.h : 单例宏定义 - 头文件 // 使用方法:.h 添加 // MYSingletonH(SingletonClass)//单例模式 // 使用方法:.m 添加 // MYSingletonM(SingletonClass)//单例模式 // MYSingletonH.h文件 - 创建MYSingletonH.h全局文件 #define MYSingletonH(na...

n7800的专栏 319
上一篇: [ios]我在使用的一些xcode插件
下一篇: [ios] performSelector无法传多个参数解决办法
iPoolo
博客等级 码龄17年 2粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值