2010-07-30 27 views
5

我想問一個關於objective-C的問題,或者可能是C語言。我想問下面#define的代碼是什麼意思?它喜歡聲明一個變量嗎?目標C中#define的含義是什麼?

#define kMountainNameString   @"name" 
#define kMountainHeightString   @"height" 
#define kMountainClimbedDateString  @"climbedDate" 

回答

13

這是一個簡單的文本替換宏。與C,C++中的工作方式相同。

其中kMountainNameString出現,編譯器將「粘貼」 @「name」。從技術上講,這發生在編譯器之前,被稱爲預處理器的機制發生。

+2

它,做替代的預處理器。編譯器不會看到任何#defines。 – codaddict 2010-07-30 04:19:20

+0

是的,當時(也許還是今天)預處理是由一個單獨的獨立工具完成的。 – seand 2010-07-30 04:22:22

+0

感謝您的回覆。我想問一下這3個元素的數據類型是什麼? – Questions 2010-07-30 04:26:08

1

預處理取代kMountainNameString出現的所有與@「名」 在編譯之前就開始了。

5

#define是由C繼承了預處理指令,採取的形式

#define identifier value 

在一般情況下,它被用來告訴預處理器在傳遞之前,將與給定的文本,以取代identifier所有實例代碼到編譯器。也可以定義標識符而不使用值作爲編譯器標誌,以防止對相同變量進行多重定義,或者在執行過程中不會更改的機器細節上進行分支。例如,要根據你的處理器的架構,你可以做這樣的事情不同的代碼傳遞給編譯:

#ifdef INTEL86 
//some 32-bit code 
#else 
//some 64-bit code 
#endif 

當這些定義分配值,它往往是一個好主意,圍繞用括號中的數值,從而保存它作爲一個單元,而不管它存在於上下文的

例如,#define FOO 3 + 7具有不同的結果#define FOO (3 + 7)上下面的行的結果,由於算術運算的順序:

a = 3 * FOO 

參見this link有關預處理器指令的詳細信息中一般或this link的信息,目的C.更集中

0

#定義是在C和C++語言的預處理器指令。

它用於定義文本的預處理器宏。 #define用於在整個文件所在的位置進行替換。

#define <macro-name> <replacement-string> 
相關問題