【发布时间】:2018-06-06 20:37:06
【问题描述】:
在我正在进行的一个项目中,我将我的一个文件命名为 math.h,这显然也是 standard library header 的名称。
一切正常,直到我开始使用 gcc 的 -I 选项:我将文件分类到单独的目录中,例如 src、obj 和 inc 用于标题。
我最终得到了类似的东西
gcc ... -Iinc/
现在我的问题是我使用的另一个库(SDL,顺便说一句)#includes standard math.h 标头(位于 /usr/include/math.h),GCC 提供了它我自己的 math.h(在 /home/me/my_project/inc/math.h 找到),显然这不会编译。
所以我的问题是,我怎样才能让 GCC 不认为我的标头是标准的?
当然我可以重命名文件,但这只是为了避免这个问题——即使我最终这样做了,我也希望知道解决方案,以防我再次遇到这个问题。
【问题讨论】:
-
为什么您认为正确的解决方案不是重命名文件?如果有多个同名文件,编译器如何知道使用哪一个?
-
“重命名”文件的一种方法是将其放在子目录中。当您包含
时,不会与 混淆。但是您将不得不以一种或另一种方式重命名,任何其他解决方案都将是一个脆弱的黑客。 -
不要用standard headers 命名你的文件。你真的不想混淆你的读者(也许你自己,几个月后)。您应该尝试编写可读代码。因此,将您的
math.h重命名为jo_math.h或其他一些独特的名称 -
“医生,医生!我这样做的时候很痛……”