GCC混淆标准标题与个人名称相同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCC混淆标准标题与个人名称相同相关的知识,希望对你有一定的参考价值。

在我正在进行的一个项目中,我将我的一个文件命名为math.h,其中obvisouly也是standard library header的名字。

一切正常,直到我开始使用gcc的-I选项:我将我的文件分类到单独的目录,如srcobjinc标题。

我结束了类似的事情

gcc ... -Iinc/

现在我的问题是我使用的另一个库(SDL,btw)#includes是标准的math.h标题(位于/usr/include/math.h),而GCC给它我自己的math.h(在/home/me/my_project/inc/math.h上找到),显然这不是编译。

所以我的问题是,如何让GCC不认为我的标题是标准的? 当然我可以重命名该文件,但这只是避免了这个问题 - 即使我最终这样做,我希望知道解决方案,以防我再次遇到这个问题。

答案

您必须重命名您的文件。 C11标准表示在当前状态下行为未定义。 C11 7.1.2p3

  1. 如果与上述<>分隔序列之一具有相同名称的文件(未作为实现的一部分提供)放置在搜索包含源文件的任何标准位置,则行为未定义。

否则,如果您正在编译内核或类似内核,请使用-ffreestanding

以上是关于GCC混淆标准标题与个人名称相同的主要内容,如果未能解决你的问题,请参考以下文章

如何避免名称混淆?

标题与标准标题具有相同名称但大小写不同的问题

C++11/14/17,GCC 7 与 GCC 8:朋友类模板的名称查找

GCC:编译成程序集并明确与代码的对应关系?

使用与 C++ 标准允许的成员变量相同的名称为构造函数参数初始化成员变量? [复制]

Proguard (R8) 混淆自定义视图名称