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

问题描述 投票:-5回答:1

在我正在进行的一个项目中,我将我的一个文件命名为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不认为我的标题是标准的? 当然我可以重命名该文件,但这只是避免了这个问题 - 即使我最终这样做,我希望知道解决方案,以防我再次遇到这个问题。

c gcc include
1个回答
6
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.