我只是想知道-fpermissive
标志在 g++ 编译器中的作用?我正进入(状态:
错误:获取临时地址 [-fpermissive]
我可以通过将 -fpermissive
标志提供给编译器来解决。
编辑:我刚刚发现导致临时地址错误部分的原因!我现在要修复那部分。
我只是想知道-fpermissive
标志在 g++ 编译器中的作用?我正进入(状态:
错误:获取临时地址 [-fpermissive]
我可以通过将 -fpermissive
标志提供给编译器来解决。
编辑:我刚刚发现导致临时地址错误部分的原因!我现在要修复那部分。
该-fpermissive
标志使编译器报告一些实际上是错误的事情(但某些编译器允许)作为警告,以允许代码编译,即使它不符合语言规则。你真的应该解决根本问题。发布演示问题的最小的、可编译的代码示例。
-fpermissive
将一些关于不合格代码的诊断从错误降级为警告。因此,使用-fpermissive
将允许编译一些不合格的代码。
当您编写了语言标准不允许的内容时(因此不能真正成为明确定义的行为,这有足够的理由不这样做)但如果天真地馈送到某种可执行文件,则碰巧映射到某种可执行文件编译引擎-fpermissive
就会这样做,而不是停止并显示此错误消息。在某些情况下,程序将完全按照您最初的预期运行,但您绝对不应该依赖它,除非您有非常特殊的理由不使用其他解决方案。
如果您想要一个真实的用例,请尝试编译一个非常旧的 X Windows 版本——比如,大约 2004 年左右的 XFree86 或 XOrg,就在拆分前后——使用 gcc 的“现代”(咳嗽)版本,如 4.9.3。
您会注意到构建 CFLAGS 指定了“-ansi”和“-pedantic”。从理论上讲,这意味着“如果有任何轻微违反语言规范的内容,就会炸毁”。在实践中,3.x 系列的 gcc 并没有捕捉到太多这种东西,并且用 4.9.3 构建它会在地上留下一个冒烟的洞,除非你将 CFLAGS 和 BOOTSTRAPCFLAGS 设置为“-fpermissive”。
使用该标志,大多数 C 文件将实际构建,让您可以自由移动到词法分析器将生成的与版本相关的残骸。=]
存在一个简单设置 -fpermissive 而不出汗的常见情况:经过彻底测试和工作的第三方库,如果没有 -fpermissive,它将无法在较新的编译器版本上编译。这些库是存在的,而且很可能不是应用程序开发人员要解决的问题,也不是在开发人员的计划预算中要做的。
设置 -fpermissive 并在这种情况下继续。