2011-03-05 69 views

回答

13
#define NUMBER 10 

將創建將由預處理器執行的字符串替換(即在編譯期間)。

float number = 10; 

將在您的二進制文件的數據段中創建一個浮點數,並將其初始化爲10.也就是說,它會有一個地址並且是可變的。

所以寫

float a = NUMBER; 

將是一樣的書寫

float a = 10; 

而寫

float a = number; 

將創建一個內存訪問。

+0

還應當指出的是,把'浮起= 10;'(或其他)頭文件中可能會導致鏈接時符號重複錯誤。不過,使用'#define'不會。程序啓動前的「 – trojanfoe 2015-11-28 12:38:12

0

「的#define」實際上是在程序啓動,並適用於整個程序之前,其運行一個預處理宏

浮子是一個程序/塊內定義的數據類型和僅在該程序是有效的/塊。

+1

」意味着在編譯之前。 – 2011-03-05 12:08:38

4

正如Philipp所說,#define表單在編譯之前的預處理階段會在您的代碼中創建替代。由於#define不是像number這樣的變量,因此您的定義在編譯時會被硬編碼到您的可執行文件中。這是可取的,如果你正在轉發的東西是一個真正的常量,不需要在運行時從某處計算或讀取,並且在運行時不會改變。

#defines對於使您的代碼更具可讀性非常有用。假設你正在做物理計算 - 而不僅僅是plonking 0.98f到代碼中無處不在,你需要使用重力加速度,你可以在一個地方定義它,它會增加你的代碼的可讀性:

#define GRAV_CONSTANT 0.98f 

... 

float finalVelocity = beginVelocity + GRAV_CONSTANT * time; 

編輯 驚訝回來,找到我的答案,看看我沒有提到你爲什麼不應該使用#define

通常,您希望避免#define並使用實際類型的常量,因爲#define s沒有範圍,並且類型對IDE和編譯器都有好處。

也看到這個問題,接受的答案:What is the best way to create constants in Objective-C

相關問題