Object C学习笔记22-#define 用法
上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 。而在c中还有另外一个很重要的关键字#define.
一. #define 简介
在C中利用预处理代码,可以让你的代码变得更加具有可读性,更加符合个人的编码风格,这也是C的强大之处。#define可以实现代码的预处理,代码在编译之前会被提前处理。
二. 常量处理
语法: #define 常量名 产量值
#define 声明主要用于将常量(或字符串)赋予有意义的名字,这个和.NET中的常量const比较的类似。
#import <Foundation/Foundation.h>
#define NAME "abc"
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *str=[[NSString alloc] initWithCString:NAME];
NSLog(@"%@",str);
}
return ;
}
上面的代码定义了一个 NAME常量,常量的值为"abc", 测试的代码输出了常量值。
请注意格式。#define 命令之后为常量名,再之后为所赋的代替值,用空格隔开,结尾不需分号。如果#define一旦被定义,那么就不能被修改,一般#define定义在一个文件的顶部,在#import 之后。
三.多个常量定义
在上一篇写到的typedef,使用typedef将同一个类型定义成不同的别名,而在#define中可以使用其他的#define定义。
#import <Foundation/Foundation.h>
#define NAME "abc"
#define A 2
#define B A*2 int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *str2=[[NSString alloc] initWithFormat:@"%d",B];
NSLog(@"%@",str2);
}
return ;
}
在代码中定义了一个A常量2,而在定义的常量B中定义了 B =A*2, B的定义使用了#define A。
四. 宏定义
#define 声明中还可以使用参数,并且可使用多个参数;这一特性被称为“宏”
#import <Foundation/Foundation.h> #define func(x,y) ( (x) * (y))
#define myfun(x) (x * 5)
int main(int argc, const char * argv[])
{
@autoreleasepool {
int value=func(, );
NSLog(@"%d",value);
int x=myfun();
NSLog(@"%d",x);
}
return ;
}
是不是很像一个函数的定义,在上面的代码定义了两个宏,func,myfun,他们都是一个表达式。使用带参数的宏定义可完成函数调用的功能,又能减少系统开 销,提高运行效率。
五. #define 和 typedef 的比较
(1)#define 宏定义可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义
(2)使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内,而使用#define 不能
Object C学习笔记22-#define 用法的更多相关文章
- Ext.Net学习笔记22:Ext.Net Tree 用法详解
Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...
- Object C学习笔记21-typedef用法
在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的. 一. 基本作用 typedef是C中的关键字,它的主要作 ...
- Object C学习笔记24-关键字总结
学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1. #import #import <> 从syste ...
- Object C学习笔记24-关键字总结(转)
学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1. #import #import <> 从syste ...
- Object C学习笔记18-SEL,@ selector,Class,@class
本章是对上一章<<Object C学习笔记17-动态判断和选择器>>的一点补充,所以比较简单点. 一. SEL 类型 在上一篇介绍了几个方法,都只是介绍了其使用方式但是没有具体 ...
- jQuery学习笔记之Ajax用法详解
这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...
- Object C学习笔记17-动态判断和选择器
当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...
- SQL反模式学习笔记22 伪键洁癖,整理数据
目标:整理数据,使不连续的主键Id数据记录变的连续. 反模式:填充断档的数据空缺. 1.不按照顺序分配编号 在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键 ...
- Object C学习笔记10-静态方法和静态属性
在.NET中我们静态使用的关键字static有着举足轻重的作用,static 方法可以不用实例化类实例就可以直接调用,static 属性也是如此.在Object C中也存在static关键字,今天的学 ...
随机推荐
- 01_传说中的车(Fabled Rooks UVa 11134 贪心问题)
问题来源:刘汝佳<算法竞赛入门经典--训练指南> P81: 问题描述:你的任务是在n*n(1<=n<=5000)的棋盘上放n辆车,使得任意两辆车不相互攻击,且第i辆车在一个给定 ...
- 同时屏蔽ios和android下点击元素时出现的阴影
在ios4+和android2+系统,当手指触摸屏幕a标签链接或按钮时,会产生不同的效果,对于ios点击元素的时候,就会出现一个半透明的灰色背景:对于android则出现红色的边框.对这2个系统自带的 ...
- Sample SecondarySort 浅析
示例文件: 100 99 100 98 100 56 100 78 20 100 30 100 20 50 30 50 30 60 20 80 需求:首先按第一个数字分组,组成按第二个数字排序. 解决 ...
- 【ASP.NET 问题】System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】错误解决
出现的问题描述: 当页面的数据量比较大时,出现异常,详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 问题的原因:出现这个异常的原因是因为微软 ...
- 【转载】eclipse插件安装
原文:http://blog.csdn.net/dylan619/article/details/46839941 原来的eclipse3.7安装了太多插件后,m2e怎么也安装不成功,因此今天重新下载 ...
- 算法分析 Analysis of Algorithms -------GeekforGeeker 翻译
算法分析 Analysis of Algorithms 为什么要做性能分析?Why performance analysis? 在计算机领域有很多重要的因素我们要考虑 比如用户友好度,模块化, 安全性 ...
- Unity脚本生命周期
前言 说到生命周期,影响最深刻的是,在接触Java的JSF组件时,JSF组件的五大生命周期,全要默写出来,嘿嘿…… 总结这两天在写小怪和掉落的糖葫芦时,老是遇到GameObject未销毁,一直存在场景 ...
- 如何查看windows xp系统的位数?
1.右击“我的电脑”->属性,可以看到.2.运行dxdiag,在操作系统一行可以看到.3.运行cmd,输入systeminfo,在系统类型一栏可以看到.--简单4.使用一些检测软件也可以看,像鲁 ...
- java 21-13 合并
SequenceInputStream(Enumeration<? extends InputStream> e) 通过记住参数来初始化新创建的 SequenceInp ...
- python 维吉尼亚
加密key='COMPUTER' plaintext='BLOCKCIPHERDESIGNPRINCIPLE' ascii='abcdefghijklmnopqrstuvwxyz'.upper() k ...