的想法是設置幾個固定CGPoint值隨着宏,和在代碼讀取它們靈活(隨機地或與設置整數值)如何處理Objective-C宏名稱中的參數?
我具有限定這樣幾個CGPoints值的頭文件:
#define kSpawnPoint1 {550,20}
#define kSpawnPoint2 {550,80}
#define kSpawnPoint3 {200,175}
我在1到3之間的代碼中生成一個隨機整數,並計劃根據整數值讀取宏中的CGPoint值。但不知道該怎麼做。在學習了關於預處理器的其他教程之後,我編寫了如下的代碼。
int tempInt = 1;
CGPoint tempSpawnPoint = kSpawnPoint(temInt);
但是它不工作。(有警告:未聲明的標識符 'kSpawnPointspawnPoint')
#define kSpawnPoint1 {550,20}
#define kSpawnPoint2 {550,80}
#define kSpawnPoint3 {200,175}
#define kSpawnPoint(x) kSpawnPoint##x
在M檔
我怎樣才能讓這對嗎?這是預先定義幾個CGPoint的正確方法嗎?我認爲我必須使用預處理器來實現這一點,考慮到未來多屏幕分辨率支持將更容易在宏中實現,並且我的kSpawnPoints不會與不同的屏幕分辨率相同。
謝謝,這也是我的想法。但我看到一個這樣的例子: #define IS_LEAP_YEAR(y)y%4 == 0 && y%100!= 0 || y%400 == 0 int ys = 2012; if(IS_LEAP_YEAR(ys)){do something} 我測試過了,它工作正常。所以我認爲宏可以在運行時帶參數。你怎麼看待這件事? – ArtS
這是有效的,因爲您並未嘗試使用僅在運行時存在的整數值來創建宏名稱,該宏名稱在預處理器階段後不再使用。宏的結果是一串算術,其中粘貼了字面變量名:'if(ys%4 == 0 && ys%100!= 0 || ys%400 == 0)',就好像你已經寫了手工編碼。 –
我想我明白這一點。謝謝,這有助於我更多地瞭解宏如何工作! – ArtS