Objective-C中"宏"是什么意思?

 人对方啥地位 发布于 2023-02-07 15:23

我是iOS开发的新手,我只是想知道Objective-C中宏的含义?

我发现"宏"与#define一起使用但仍然没有得到它的含义.

http://www.saturngod.net/ios-macro-define-value-with-condition

2 个回答
  • 是的,拉姆是对的.宏可以用于多种语言,它不是objective-c语言的专长.

    宏是预处理器定义.这意味着在编译代码之前,预处理器会扫描您的代码,并且除了其他方面之外,还会在您看到宏名称的任何地方替换宏的定义.它没有比这更聪明的事情.

    几乎是文字代码替换.例如-

    假设您希望方法返回最多两个数字.你编写一个宏来完成这个简单的任务:

    #define MAX(x, y) x > y ? x : y
    

    简单吧?然后,在代码中使用宏,如下所示:

    int a = 1, b = 2;
    int result = 3 + MAX(a, b);
    

    编辑:

    问题是预编译器在编译之前将宏定义替换为代码,因此这是编译器看到的代码:

    int a = 1, b = 2;
    int result = 3 + a > b ? a : b;
    

    C操作顺序要求在应用三元运算符之前计算和3 + a.您打算在结果中保存3 + 2的值,而是先添加3 + 1,然后测试总和是否大于2.因此结果等于2,而不是你预期的5.

    所以你通过添加一些括号来解决问题,然后再试一次:

    #define MAX(x, y) ((x) > (y) ? (x) : (y))
    

    2023-02-07 15:25 回答
  • 宏是已赋予名称的代码片段.每当使用该名称时,它将被宏的内容替换.有两种宏.它们的区别主要在于它们在使用时的外观.类似对象的宏在使用时类似于数据对象,类似函数的宏类似于函数调用.

    类对象宏是一个简单的标识符,它将被代码片段替换.它被称为类似对象,因为它看起来像是使用它的代码中的数据对象.它们最常用于为数字常量指定符号名称.

    您可以使用'#define'指令创建宏.'#define'之后是宏的名称,然后是令牌序列,它应该是缩写,它被不同地称为宏的主体,扩展或替换列表.例如,

     #define BUFFER_SIZE 1024
    

    将名为BUFFER_SIZE的宏定义为令牌1024的缩写.如果在此'#define'指令之后的某处,则会出现表单的Objective C语句

     foo = (char *) malloc (BUFFER_SIZE);
    

    Objective C编译器将看到与您编写时相同的标记

     foo = (char *) malloc (1024);
    

    您还可以定义其使用看起来像函数调用的宏.这些被称为类似函数的宏.要定义类似函数的宏,可以使用相同的'#define'指令,但是在宏名称后面紧跟一对括号.喜欢:

    #define isIphone([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    
    #define GetImage(imageName) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]     pathForResource:imageName ofType:@"png"]]
    

    2023-02-07 15:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有