[問題] 谷哥coding style的學習

看板C_and_CPP (C/C++)作者 (rosemary)時間13年前 (2012/11/11 17:18), 編輯推噓2(2027)
留言29則, 12人參與, 最新討論串1/2 (看更多)
最近再看google的coding style http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml 有些地方不是很懂 <Question 1> Header Files ... Correct use of header files can make a huge difference to the readability, size and performance of your code. 我只知道若include不必要的header file會造成compile的時間變長, build出來的.exe檔會比較大 但是正確的引入header file為什麼會對readability和performance造成影響呢? <Question 2> The #define Guard All header files should have #define guards to prevent multiple inclusion. The format of the symbol name should be <PROJECT>_<PATH>_<FILE>_H_ 印象中使用#pragma once也可以達到相同的效果, Google規定使用#define guards的原因是因為#pragma once是VC的comiler限定嗎?? <Question 3> Names and Order of Includes Use standard order for readability and to avoid hidden dependencies: C library, C++ library, other libraries' .h, your project's .h. 這樣規定的好處是什麼呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.153.199

11/11 18:04, , 1F
code 需要給作者以外的人 review 時就會有差了
11/11 18:04, 1F

11/11 18:06, , 2F
減少檔案之間的相依性可以讓測試程式比較好寫
11/11 18:06, 2F

11/11 18:08, , 3F
高內聚,低偶合
11/11 18:08, 3F

11/11 19:09, , 4F
也就是說在std lib裡沒有的就盡量自己寫(?
11/11 19:09, 4F

11/11 20:01, , 5F
q2 是你說的 也不是你說的
11/11 20:01, 5F

11/11 20:01, , 6F
q2 是google要強調如果你有寫自己的library就要避免
11/11 20:01, 6F

11/11 20:01, , 7F
重覆定義的問題發生 那#define guard是最好的solution
11/11 20:01, 7F

11/11 20:02, , 8F
提供解法時 當然是給最好的一個 只是他強調的是要注
11/11 20:02, 8F

11/11 20:02, , 9F
重覆定義的問題
11/11 20:02, 9F

11/11 23:25, , 10F
你們要不要各自寫一篇對這幾條的「解釋」 真是精彩 |D
11/11 23:25, 10F

11/11 23:26, , 11F
這幾條根本是看過去記起來就好的東東 不需要一直窮究
11/11 23:26, 11F

11/11 23:29, , 12F
style非rule 他提供他認為較好的方式 你不一定全部採納
11/11 23:29, 12F

11/11 23:57, , 13F
看處於哪個學習階段吧,學習中去想為什麼很好啊
11/11 23:57, 13F

11/12 12:15, , 14F
最後一條看過另一個說法 應該先include .cpp對應的.h
11/12 12:15, 14F

11/12 12:15, , 15F
如此才能確保每個.h都是self-compilable 即不依靠其他.h就
11/12 12:15, 15F

11/12 12:16, , 16F
能通過編譯 這邊我覺得比google style合理
11/12 12:16, 16F

11/12 12:27, , 17F
google style可以避免連.h裡用個string都要predeclare
11/12 12:27, 17F

11/12 12:37, , 18F
.h裡面用到string的情況,應該直接在.h裡面include
11/12 12:37, 18F

11/12 12:38, , 19F
因為.h用到不代表使用它的.cpp有用到
11/12 12:38, 19F

11/12 12:39, , 20F
google style說得很清楚,這是為了容易理解相依性
11/12 12:39, 20F

11/12 12:40, , 21F
把相關的部份放在一起,你一看就知道用了C++的哪些lib
11/12 12:40, 21F

11/12 12:42, , 22F
哪個先哪個後我認為並不是很重要,但統一順序是好的
11/12 12:42, 22F

11/12 12:51, , 23F
rodion 說的另一個說法,其實就是 google 自己的說明寫的
11/12 12:51, 23F

11/12 16:33, , 24F
謝樓上 確實如此 原PO的文章沒寫第一個order
11/12 16:33, 24F

11/12 21:47, , 25F
Thanks a lot
11/12 21:47, 25F

11/13 04:34, , 26F
q3 另一個用意是把較可靠的放前,較不可靠的放後。
11/13 04:34, 26F

11/13 04:35, , 27F
不然自己寫錯的時候可能錯誤訊息會出現在 std header 上,
11/13 04:35, 27F

11/13 04:35, , 28F
因為你自己寫的 header 漏了什麼,造成往下炸過去。
11/13 04:35, 28F

11/13 04:36, , 29F
弄不清楚狀況的人,可能以為是 std header 有 bug...
11/13 04:36, 29F
文章代碼(AID): #1Gdss3Zh (C_and_CPP)
文章代碼(AID): #1Gdss3Zh (C_and_CPP)