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

看板C_and_CPP (C/C++)作者 (私は幸せです)時間8年前 (2016/06/09 04:27), 8年前編輯推噓2(206)
留言8則, 1人參與, 最新討論串3/6 (看更多)
※ 引述《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) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.127.22 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1465417665.A.4B7.html ※ 編輯: Hazukashiine (1.160.127.22), 06/09/2016 04:34:30

06/09 04:34, , 1F
union有這種特性?我第一次知道
06/09 04:34, 1F

06/09 04:35, , 2F
不過C++11開始指標會初始成nullptr嗎?
06/09 04:35, 2F
不知道耶~對 C++ 標準不熟 QQ 坐等補充 www

06/09 04:37, , 3F
union不會因為alignment初始所有成員嗎?
06/09 04:37, 3F
舉個例子: union { char ch; int in; } un; 只有第一個位元組被初始化為零。 ※ 編輯: Hazukashiine (1.160.127.22), 06/09/2016 04:50:31

06/09 04:50, , 4F
找到了,在C11 Standard 6.7.9有這rule
06/09 04:50, 4F

06/09 04:51, , 5F
不過如果是linux的情況,OS實作是把static擺BSS
06/09 04:51, 5F

06/09 04:51, , 6F
那應該就算是union也會是全都0
06/09 04:51, 6F

06/09 04:51, , 7F
windows我就不知了....
06/09 04:51, 7F

06/09 04:59, , 8F
已經修改好了,找資料的時候居然看漏了,感謝指正
06/09 04:59, 8F
文章代碼(AID): #1NM7_1It (C_and_CPP)
文章代碼(AID): #1NM7_1It (C_and_CPP)