Re: C/C++ 語言新手十三誡 -- Ver. 2016

作者: Hazukashiine (私は幸せです)   2016-06-09 04:27:41
※ 引述《wtchen (沒有存在感的人)》之銘言: 問題點
: ^^^^^^
: 備註:
: 根據C Standard,擁有static storage duration的變數,
: 例如全域變數(global variable)或帶有static修飾字者,
: 其初值(宣告的時候若是沒有另外設初值的情況)為定值(最自然的初值就是0)。
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^
可以改成:
  根據 C Standard,具有靜態儲存期的變數(e.g. 帶有 static 修飾符者等),
  如果沒有顯式初始化的話,根據不同的資料型態予以進行以下初始化:
  若變數為算術型別 (int , double , ...) 時,初始化為零或正零。
  若變數為指標型別 (int*, double*, ...) 時,初始化為 null 指標。
  若變數為複合型別 (struct, double _Complex, ...) 時,遞迴初始化所有成員。
  若變數為聯合型別 (union) 時,只有其中的第一個成員會被遞迴初始化。
雖然這好像有點太瑣碎了,但是主要還是
  null 指標不一定是 0, 還有 union 不是所有成員都會被初始化的問題。
Reference: C99 standard (n1256): Section 6.7.8 Initialization (#10)
作者: wtchen (沒有存在感的人)   2016-06-09 04:34:00
union有這種特性?我第一次知道不過C++11開始指標會初始成nullptr嗎?union不會因為alignment初始所有成員嗎?找到了,在C11 Standard 6.7.9有這rule不過如果是linux的情況,OS實作是把static擺BSS那應該就算是union也會是全都0windows我就不知了....已經修改好了,找資料的時候居然看漏了,感謝指正

Links booklink

Contact Us: admin [ a t ] ucptt.com