我只是有蘋果的C/C++編譯器初始化浮到一個非零值(約「-0.1」)。默認初始化爲C的基本類型是什麼?
這是一個巨大的驚喜 - 只有偶爾發生(但100%的重複,如果通過同樣的功能調用運行/ ARGS事前)。追蹤(使用斷言)需要很長時間。
我還以爲浮標零初始化。谷歌搜索顯示,我想C++的(當然這是更爲精確的這個東西 - C.F. SO:What are primitive types default-initialized to in C++?)。
但也許蘋果公司在這裏的藉口是,他們的編譯器在C模式下運行......所以:什麼關於C?應該發生什麼,(更重要的)什麼是典型的?
(當然我應該手動初始化它 - 我通常做的 - 但我沒有這一個情況下,我沒想到它炸掉,雖然!)
(谷歌被證明是有害無益對於這個的討論 - 他們目前的搜索拒不顯示「C」沒有「C++」保持決定我太傻了,竟然無視,甚至我的輸入在高級模式下運行時)
這裏的實際源示例發生的地方。起初我以爲有可能與MAX的定義和ABS(也許MAX(ABS,ABS)總不你會期待什麼?)有問題......但斷言和調試挖,我終於發現有人失蹤初始化 - 花車漸漸init'd爲非零值非常偶然):如果沒有明確的初始化
float crossedVectorX = ... // generates a float
float crossedVectorY = ... // generates a float
float infitesimal; // no manual init
float smallPositiveFloat = 2.0/MAX(ABS(crossedVectorX), ABS(crossedVectorY));
// NB: confirmed with debugger + assertions that smallPositiveFloat was always positive
infitesimal += smallPositiveFloat;
NSAssert(infitesimal >= 0.0, @"This is sometimes NOT TRUE");
取決於「初始化」發生的位置 - 可能根本不初始化。 – Mat 2012-04-10 13:19:04
添加了我看到問題的源代碼的複製/粘貼。對我來說,它應該被初始化? – Adam 2012-04-10 13:27:36
+1詢問一個問題,即每個人都知道答案的好處。 – borrrden 2012-04-10 14:21:46