首页 文章

狡猾的旗帜做什么?

提问于
浏览
101

我只是想知道 -fpermissive 标志在g编译器中的作用是什么?我正进入(状态:

错误:获取临时[-fpermissive]的地址

我可以通过给编译器提供 -fpermissive 标志来解决这个问题 .

EDIT :我刚刚发现导致临时地址错误的部分!我现在要修理那个部分 .

4 回答

  • 6

    the docs开始:

    -fpermissive将有关不符合代码的一些诊断程序从错误降级为警告 . 因此,使用-fpermissive将允许编译一些不合格的代码 .

    底线: don't use 它除非你知道你在做什么!

  • 42

    -fpermissive flag使编译器报告一些实际上是错误的东西(但是被某些编译器允许)作为警告,以允许代码编译,即使它不符合语言规则 . 你真的应该解决潜在的问题 . 发布演示问题的最小,可编译的代码示例 .

    -fpermissive将有关不符合代码的一些诊断程序从错误降级为警告 . 因此,使用-fpermissive将允许编译一些不合格的代码 .

  • 122

    当你被语言标准所允许时(因此不能真正定义明确的行为,这是不足以做到这一点的理由)但是如果将天真地提供给编译引擎则恰好映射到某种可执行文件,那么 -fpermissive 只会这样做,而不是停止此错误消息 . 在某些情况下,程序将按照您最初的预期运行,但除非您有一些非常特殊的理由不使用其他解决方案,否则您绝对不应该依赖它 .

  • 14

    如果您想要一个真实世界的用例,请尝试编译一个非常旧版本的X Windows - 比如,2004年的XFree86或XOrg,就在分裂时 - 使用gcc的“现代”(咳嗽)版本,例如4.9.3 .

    您会注意到构建CFLAGS同时指定“-ansi”和“-pedantic” . 从理论上讲,这意味着,“如果有任何事情甚至会轻微违反语言规范,那就会爆炸” . 在实践中,3.x系列的gcc没有捕捉到这种东西,并且用4.9.3构建它会在地面留下一个吸烟洞,除非你将CFLAGS和BOOTSTRAPCFLAGS设置为“-fpermissive” .

    使用该标志,大多数C文件将实际构建,让您可以自由地转移到词法分析器将生成的依赖于版本的残骸 . =]

相关问题