作者forb9823018 (風過無痕)
看板C_and_CPP
標題[問題] header file 的命名與引用
時間Sun Apr 23 01:10:30 2017
開發平台(Platform): (Ex: Win10, Linux, ...) Android
編譯器:GCC
問題(Question):
想請問一下
header file 如果不照慣例命名 使用ifdef 時後面的
參數怎麼知道是變數名字還是檔名?
所以檔名是有可能跟變數名稱撞名報錯?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 150.117.206.252
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1492881032.A.0E8.html
1F:推 LPH66: 對編譯器來說, header guard 的名字只是另一個巨集名字而已 04/23 02:50
2F:→ LPH66: 所以只要不要跟你的程式裡的所有變數/巨集等等名字撞名就好 04/23 02:50
3F:→ LPH66: 一旦撞名, 因為那個巨集定義是把它代換成空字串 04/23 02:51
4F:→ LPH66: 撞名的那個名字就會不見 04/23 02:51
5F:→ LPH66: 那不見之後會報什麼錯就不一定了 04/23 02:51
6F:→ LPH66: 這也就是你前一個問題在問的會有人故意加 INCLUDED 的原因 04/23 02:52
7F:→ LPH66: 因為那個名字就夠長到出現在程式裡面的機率非常小 04/23 02:53
8F:→ LPH66: 再來, header guard 之所以會寫檔名的原因是為了明確指出 04/23 02:53
9F:→ LPH66: 這是用在對誰的 guard 這樣而已, 總不能寫這個但影響別人吧 04/23 02:54
10F:→ LPH66: 最後, 所有以上的麻煩都可以用 #pragma once 取代 04/23 02:55
11F:推 steve1012: 能用pragma once 就用 不要自找麻煩 04/23 08:03
12F:→ forb9823018: 3Q 因為在android 平台trace code 05/01 17:18
13F:→ forb9823018: 看別人code的時候不確定有沒有定義 05/01 17:19