GCC混淆标准标题与个人名称相同
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCC混淆标准标题与个人名称相同相关的知识,希望对你有一定的参考价值。
在我正在进行的一个项目中,我将我的一个文件命名为math.h
,其中obvisouly也是standard library header的名字。
一切正常,直到我开始使用gcc的-I
选项:我将我的文件分类到单独的目录,如src
,obj
和inc
标题。
我结束了类似的事情
gcc ... -Iinc/
现在我的问题是我使用的另一个库(SDL,btw)#include
s是标准的math.h标题(位于/usr/include/math.h
),而GCC给它我自己的math.h(在/home/me/my_project/inc/math.h
上找到),显然这不是编译。
所以我的问题是,如何让GCC不认为我的标题是标准的? 当然我可以重命名该文件,但这只是避免了这个问题 - 即使我最终这样做,我希望知道解决方案,以防我再次遇到这个问题。
答案
您必须重命名您的文件。 C11标准表示在当前状态下行为未定义。 C11 7.1.2p3
- 如果与上述
<
和>
分隔序列之一具有相同名称的文件(未作为实现的一部分提供)放置在搜索包含源文件的任何标准位置,则行为未定义。
否则,如果您正在编译内核或类似内核,请使用-ffreestanding
。
以上是关于GCC混淆标准标题与个人名称相同的主要内容,如果未能解决你的问题,请参考以下文章
C++11/14/17,GCC 7 与 GCC 8:朋友类模板的名称查找