回答
#define NUMBER 10
將創建將由預處理器執行的字符串替換(即在編譯期間)。
float number = 10;
將在您的二進制文件的數據段中創建一個浮點數,並將其初始化爲10.也就是說,它會有一個地址並且是可變的。
所以寫
float a = NUMBER;
將是一樣的書寫
float a = 10;
而寫
float a = number;
將創建一個內存訪問。
「的#define」實際上是在程序啓動,並適用於整個程序之前,其運行一個預處理宏
浮子是一個程序/塊內定義的數據類型和僅在該程序是有效的/塊。
」意味着在編譯之前。 – 2011-03-05 12:08:38
正如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
- 1. java中float和float有什麼區別?
- 2. float []區別
- 3. define,let和set之間的區別!
- 4. SET SCAN和SET DEFINE之間的區別
- 5. FunctionDefHelper :: Create和FunctionDefHelper :: Define有什麼區別?
- 6. C中#define和'='有什麼區別?
- 7. CSS:float:left和float之間的區別:right
- 8. define('MENU_IS_ROOT',0x0001)和define('MENU_IS_ROOT',1)之間有什麼區別?
- 9. float arrayName [] []和float(* arrayNamePointer)之間的區別是什麼[]
- 10. Java中float「1」和float「1f」之間的區別是什麼?
- 11. PYTHON 3中float(44 * 2.2)和(float)(44 * 2.2)的區別是什麼?
- 12. float x []與float [] x有什麼區別?
- 13. .NET double和python float有什麼區別?
- 14. float和float有什麼區別?在C#中財產返還型
- 15. C#:(float)(x/y)和x /(float)y之間是否有區別?
- 16. (define(deriv-squared f)(proc(deriv f)))和(define deriv-squared(proc deriv))有什麼區別?
- 17. 「#define STR(x)#x」和「#define STR(x)VAL(x)」與「#define VAL(x)#x」之間的區別是什麼?
- 18. NASM中的%define和equ有什麼區別?
- 19. RequireJS中的define和require有什麼區別?
- 20. Android中的「public float getFocalLength()」和「public void getFocusDistances(float [] output)」有什麼區別?
- 21. maya中的float和double有什麼區別?
- 22. 修復Float和Numeric字段類型之間的區別
- 23. float32 vs single和float與double有什麼區別?
- 24. 在PHP中floatval和(float)有什麼區別?
- 25. 在這個輸入中float和double有什麼區別?
- 26. cuda編程中float和double類型有什麼區別?
- 27. java中的float-extended-exponent和float之間的差別
- 28. printf和co如何區分float和double
- 29. Scheme define-macro和/或define-syntax
- 30. 任何#define或類似於開發版本和adhoc/release之間的區別?
還應當指出的是,把'浮起= 10;'(或其他)頭文件中可能會導致鏈接時符號重複錯誤。不過,使用'#define'不會。程序啓動前的「 – trojanfoe 2015-11-28 12:38:12