「#define true 1
定義名稱true 使它等於值1。
gameover = true;
使用了預定義名稱true,指定值true給gameover。
預定義後面沒有分號。給true賦值也沒有用等號。
,#define 語句很特別,經常放在程式開始的地方,#import 或者include之後,這並不是必須的,也可以放在程式的任何地方,但是在程式引用這個名稱之前,必須先定義它們,預定義名稱沒有區域性定義的說法,在定義乙個名稱之後,就可以在程式的任何地方使用它。
習慣上,程式設計師喜歡把大寫字母作為常量名稱這樣更加容易區分,預定義名。或者在定義之前加上字母k。
12.1.2更高階的定義型別
預定義乙個表示式,預定義本身也可以作為預定義的值。或者是乙個字元。
,#define two_pi 2.0 * 3.14
,#define pi 3.14
,#define two_pi 2.0 * pi
如果預定義程式假設定義包含在程式的一行中,如果需要第二行,那麼上一行的最後乙個字元必須是反斜線符號。
if (year % 4 ==0 && year %100 != 0 || year % 400 ==0)
…,#define is_leap_year year % 4 == 0 && year %100 != 0 \ ||year % 400 ==0
在執行帶有引數的預定義時,預定義名稱和引數列表的左括號之間不能有空格。
,#define ,#define is_leap_year(y) y % 4 == 0 && y % 100\ != 0 || y % 400 ==0
這裡沒有定義引數型別,所以只是執行字面上的替換。
按照前面的語句可以編寫如下:
if ( is_leap_year(year) )
… 只要出現y,就用year來替換它。
在定義巨集時,有乙個有趣的陷阱。
,#define square(x) x * x
y = square(v);
把v * v 賦值給y ,如果是以下語句:
y = square(v + 1)
這樣的語句並不會想期望的那樣,把(v + 1)的平方賦值給y,因為預處理程式是對巨集定義的引數實行文字替換,會得到以下求值:
y = v + 1 * v + 1;
要解決這個問題我們要在定義中加入括號:
,#define square(x) ( (x) * (x) )
,#ifdef, #endif ,#else, #ifndef語句
Objective C學習筆記1
這幾篇筆記是讀 objective c基礎教程 learn objective c on the mac for os x and ios 第二版 做的筆記。主要是一些讀書時遇到的疑惑,都是自己的理解,不一定正確,紀錄下來方便以後查閱,內容比較基礎,對剛入門ios的朋友也許有些幫助。1,關於bool...
Objective C 學習筆記
1 is a 是乙個 繼承,提高執行效率,減少重複 2 has a 有乙個 復合,物件引用其它物件時,利用其它物件特性。3 返回屬性值的訪問方法,名稱中不能使用get這個詞 4 類名首字母大寫,變數首字母小寫。5 在objective c中所有物件間互動都是通過指標實現的。6 指標值被賦值,只有乙個...
Objective c學習筆記
property是object c的乙個特性,可以讓我們輕鬆實現成員變了的setting和getting方法。具體的語法如下 以成員變數nsstring m name為例 標頭檔案中宣告如下 property nsstring m name m檔案實現 synthesize m name 這樣我們便...