作者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/cn.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