[問題] header file 的命名與引用

看板C_and_CPP作者 (風過無痕)時間7年前 (2017/04/23 01:10), 編輯推噓2(2011)
留言13則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Android 編譯器:GCC 問題(Question): 想請問一下 header file 如果不照慣例命名 使用ifdef 時後面的 參數怎麼知道是變數名字還是檔名? 所以檔名是有可能跟變數名稱撞名報錯? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 150.117.206.252 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1492881032.A.0E8.html

04/23 02:50, , 1F
對編譯器來說, header guard 的名字只是另一個巨集名字而已
04/23 02:50, 1F

04/23 02:50, , 2F
所以只要不要跟你的程式裡的所有變數/巨集等等名字撞名就好
04/23 02:50, 2F

04/23 02:51, , 3F
一旦撞名, 因為那個巨集定義是把它代換成空字串
04/23 02:51, 3F

04/23 02:51, , 4F
撞名的那個名字就會不見
04/23 02:51, 4F

04/23 02:51, , 5F
那不見之後會報什麼錯就不一定了
04/23 02:51, 5F

04/23 02:52, , 6F
這也就是你前一個問題在問的會有人故意加 INCLUDED 的原因
04/23 02:52, 6F

04/23 02:53, , 7F
因為那個名字就夠長到出現在程式裡面的機率非常小
04/23 02:53, 7F

04/23 02:53, , 8F
再來, header guard 之所以會寫檔名的原因是為了明確指出
04/23 02:53, 8F

04/23 02:54, , 9F
這是用在對誰的 guard 這樣而已, 總不能寫這個但影響別人吧
04/23 02:54, 9F

04/23 02:55, , 10F
最後, 所有以上的麻煩都可以用 #pragma once 取代
04/23 02:55, 10F

04/23 08:03, , 11F
能用pragma once 就用 不要自找麻煩
04/23 08:03, 11F

05/01 17:18, , 12F
3Q 因為在android 平台trace code
05/01 17:18, 12F

05/01 17:19, , 13F
看別人code的時候不確定有沒有定義
05/01 17:19, 13F
文章代碼(AID): #1O-uw83e (C_and_CPP)