Object C学习笔记22-#define 用法
上一篇講到了typedef 關(guān)鍵字的使用,可以參考文章 Object C 學(xué)習(xí)筆記--typedef用法?。而在c中還有另外一個(gè)很重要的關(guān)鍵字#define.
一. #define 簡介
在C中利用預(yù)處理代碼,可以讓你的代碼變得更加具有可讀性,更加符合個(gè)人的編碼風(fēng)格,這也是C的強(qiáng)大之處。#define可以實(shí)現(xiàn)代碼的預(yù)處理,代碼在編譯之前會(huì)被提前處理。
?
二. 常量處理
語法: #define 常量名 產(chǎn)量值
#define?聲明主要用于將常量(或字符串)賦予有意義的名字,這個(gè)和.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 0; }上面的代碼定義了一個(gè) NAME常量,常量的值為"abc", 測試的代碼輸出了常量值。
請(qǐng)注意格式。#define?命令之后為常量名,再之后為所賦的代替值,用空格隔開,結(jié)尾不需分號(hào)。如果#define一旦被定義,那么就不能被修改,一般#define定義在一個(gè)文件的頂部,在#import 之后。
?
三.多個(gè)常量定義
在上一篇寫到的typedef,使用typedef將同一個(gè)類型定義成不同的別名,而在#define中可以使用其他的#define定義。
#import <Foundation/Foundation.h> #define NAME "abc" #define A 2 #define B A*2int main(int argc, const char * argv[]) {@autoreleasepool {NSString *str2=[[NSString alloc] initWithFormat:@"%d",B];NSLog(@"%@",str2);}return 0; }在代碼中定義了一個(gè)A常量2,而在定義的常量B中定義了 B =A*2, B的定義使用了#define A。
?
四. 宏定義
#define?聲明中還可以使用參數(shù),并且可使用多個(gè)參數(shù);這一特性被稱為“宏”
#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(5, 5);NSLog(@"%d",value);int x=myfun(5);NSLog(@"%d",x);}return 0; }是不是很像一個(gè)函數(shù)的定義,在上面的代碼定義了兩個(gè)宏,func,myfun,他們都是一個(gè)表達(dá)式。使用帶參數(shù)的宏定義可完成函數(shù)調(diào)用的功能,又能減少系統(tǒng)開 銷,提高運(yùn)行效率。
?
五. #define 和 typedef 的比較
(1)#define 宏定義可以使用 #ifdef ,#ifndef等來進(jìn)行邏輯判斷,還可以使用#undef來取消定義
(2)使用typedef定義的變量類型其作用范圍限制在所定義的函數(shù)或者文件內(nèi),而使用#define 不能
?
總結(jié)
以上是生活随笔為你收集整理的Object C学习笔记22-#define 用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习记录--开机挂载错误
- 下一篇: 现在很多技术知识点缺乏来龙去脉的介绍