1 #import <Foundation/Foundation.h> 2 3 /** 1.define語句:預定義名稱右邊的所有字符都會被預處理程序替換到程序中 */ 4 /** 5 * 使用注意: 6 * 1.預定義名稱不是變量,不能給它賦值,除非替換指定值的結果實際上是一個變量; 7 * 2.語句末尾不能出現分號“;”; 8 * 3.預處理程序定義的右面不必是合法的Objective-C表達式,如 #define AND && 9 * 4.預定義的值可以引用另一個預定義的值,如10 #define PI 3.14159265411 #define TWO_PI 2.0 * PI // 兩個表達式前后顛倒也是合法的12 [規則:在程序中使用預定義名稱時,只要所有的符號都是定義過的,那么就可以在定義中引用其他預定義的值]13 */14 15 /** 命名規范:預定義的名稱都用大寫,如PI,或者在定義之前加k,但k之后的字符并不全部大寫,如kMaxValues; */16 17 /** 1.1 簡單使用 */18 #define PI 3.14159265419 #define TWO_PI 2.0 * PI20 21 /** 1.2 檢測變量year是不是閏年 */22 /**23 #define IS_LEAP_YEAR year % 4 == 0 && year % 100 != 0 /24 || year % 400 == 0 // if (IS_LEAP_YEAR)25 // 上面的define實際上是這個意思: if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)……26 */27 28 /** 1.3 將IS_LEAP_YEAR定義為帶有一個名為y的參數,來判斷任何一年是否為閏年 */29 #define IS_LEAP_YEAR(y) y % 4 == 0 && y % 100 != 0 /30 || year % 400 == 0 // 這里沒有定義參數y的類型,因為這里僅執行字面文本替換,并沒有調用函數,注意:預定義名稱和參數列表的左括號之間不允許空格31 // if (IS_LEAP_YEAR(nextYear)) 用來判斷nexYear的值是不是閏年32 // 上面的define實際上是這個意思: if (nextYear % 4 == 0 && nextYear % 100 != 0 || nextYear % 400 == 0) ……33 34 /** 1.4 帶參數的宏定義的一個“小陷阱” */35 #define SQUARE(x) x * x36 // y = SQUARE(v) 等價于 y = v ^ 2;而y = SQUARE(v + 1) 等價于 y = v + 1 * v + 1,而不是等于 y = (v + 1) * (v + 1)。因為與處理程序對宏定義的參數是實行文本替換的,要想解決這個問題,需要加括號, #define SQUARE(x) ((x) * (x))37 38 /** 1.5 練習:創建個分數 */39 #define MakeFract(x,y) ([[Fraction alloc] initWith: x over: y])40 // 創建分數1/3 myFract = MakeFract(1,3);41 42 /** 1.6 注意:運算符的優先級的問題43 * &運算符是按位AND運算符,它的優先級低于宏中使用的>運算符。如果宏定義中沒有括號,>運算符將在按位AND之前求值。44 * 題: #define IS_LOWER_CASE(x) ( ((x) >= 'a') && ((x) <= 'z') )45 */46 47 48 @interface Circle : NSObject49 @PRoperty(nonatomic, assign) int radius; // 圓的半徑50 @property(nonatomic, assign) int year;51 - (double)area;52 - (double)circumference;53 @end54 55 56 @implementation Circle57 - (double)area58 {59 return PI * _radius * _radius;60 }61 - (double)circumference62 {63 return 2.0 * PI * _radius;64 return TWO_PI * _radius;65 }66 @end67 68 69 int main(int argc, const char * argv[]) {70 @autoreleasepool {71 Circle *c = [[Circle alloc] init];72 c.radius = 5;73 NSLog(@"圓的面積是%f平方米,圓的周長是%f米", [c area], [c circumference]);74 return 0;75 }76 }
新聞熱點
疑難解答