[討論] 宣告同時給初值

看板C_and_CPP (C/C++)作者 (大鳥)時間14年前 (2012/06/02 15:05), 編輯推噓2(2022)
留言24則, 8人參與, 最新討論串1/3 (看更多)
其實比較像閒聊啦, 不過這邊沒有閒聊可以選 最近發現兩種coding style 第一種是會在函數前面宣告變數, 等到要用到的時候才給他初值 比如 int func() { int var; /*Other code Other code Other code*/ var = somevalue; /*some to process var some to process var*/ } 第二種是 宣告就同時給值 比如 int func() { int var = somevalue; /*Other code Other code Other code*/ /*some code to process var some code to process var*/ } 我想這兩種寫法應該是都可以, 只跟可讀性有關吧? 但是這邊的可讀性又不是會看不下去那種, 只是習慣問題. 不知道大家的習慣如何? ==== 補充一下 我看到第二種寫法那套code 他連for loop一定先給值 他的for loop 會這樣寫 int func() { int i = 0; /*other code*/ for (; i < MAX; i++) { /*do something*/ } } 所以這樣是比較嚴謹的方法嗎? 可以避免i 沒有宣告到之類的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.81.253

06/02 15:09, , 1F
我覺得第二種方式比較"安全",特別是用在 += 這種情況時
06/02 15:09, 1F

06/02 15:35, , 2F
以 Coding Style 來說,可能用 #define 放 .h 比較好
06/02 15:35, 2F

06/02 15:35, , 3F
可讀性反而次要,c++裡沒給初值的變數很危險
06/02 15:35, 3F

06/02 15:35, , 4F
我相信大多數的編譯器,是會編出一樣的組語只差 addr 順序
06/02 15:35, 4F
※ 編輯: wzbird 來自: 61.222.81.253 (06/02 15:48)

06/02 16:07, , 5F
第二種比較好,怕你還沒給予初值就使用到,會錯
06/02 16:07, 5F

06/02 16:08, , 6F
我覺得還沒用到就不要宣告,宣告了就表示要用,那表
06/02 16:08, 6F

06/02 16:08, , 7F
示你就有初值要給他。
06/02 16:08, 7F

06/02 16:09, , 8F
另外我for那個i會在for裡面宣告,不要讓他scope太大
06/02 16:09, 8F

06/02 16:44, , 9F
for迴圈這個根本只是因為純C不能在裡面宣告吧wwww
06/02 16:44, 9F
我剛剛試了, 在for裡面宣告, 果然被gcc罵了 Q_Q error: 'for' loop initial declaration used outside C99 mode 所以C90不允許在for 才中宣告變數 但是第二種style 又習慣在宣告就給初值, 所以才把for的值也提到function 最前面 讓for的第一個欄位留空白 ※ 編輯: wzbird 來自: 61.222.81.253 (06/02 16:58)

06/02 17:17, , 10F
C99我記得要求所有變數都要在一開使宣告,不能途中
06/02 17:17, 10F

06/02 17:18, , 11F
在多宣告變數
06/02 17:18, 11F

06/02 17:18, , 12F
看到下一篇發現原來是c90...
06/02 17:18, 12F
※ 編輯: wzbird 來自: 61.222.81.253 (06/02 17:23)

06/02 17:23, , 13F
所以應該是C90的限制才發生這個error
06/02 17:23, 13F

06/02 17:24, , 14F
那這樣說我的gcc是c90的規格囉? (我自己都不知道XD)
06/02 17:24, 14F

06/02 18:42, , 15F
C99或c99都有支援,我不太清楚預設是那個,不過你可
06/02 18:42, 15F

06/02 18:42, , 16F
可以自己下參數選擇
06/02 18:42, 16F

06/02 19:08, , 17F
gcc遇到副檔名是.c的檔案,預設應該會用c90的標準編譯
06/02 19:08, 17F

06/02 19:09, , 18F
如果是 for (int i...) 印象中副檔名為 .cpp 就可以
06/02 19:09, 18F

06/02 19:48, , 19F
c++ 不需要在 scope 的頭宣告, C 的話,用 {} 搞個 scope
06/02 19:48, 19F

06/02 20:26, , 20F
還有第三種,就是要用時才宣告並給初值...
06/02 20:26, 20F

06/02 20:47, , 21F
上面說的第二種,不就是樓上講的那種嗎...
06/02 20:47, 21F

06/02 22:26, , 22F
gcc -std=c99 可以支援 c99
06/02 22:26, 22F

06/02 23:00, , 23F
diabloevagto:不一樣...第三種宣告的位置在第一種指定的地
06/02 23:00, 23F

06/02 23:01, , 24F
方,而不是在開頭(我發現 littleshan 回了...)
06/02 23:01, 24F
文章代碼(AID): #1FoRik1t (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FoRik1t (C_and_CPP)