Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ FPERMISSION标志的作用是什么?_C++_Gcc_Compiler Options - Fatal编程技术网

C++ FPERMISSION标志的作用是什么?

C++ FPERMISSION标志的作用是什么?,c++,gcc,compiler-options,C++,Gcc,Compiler Options,我只是想知道-fppermissive标志在g++编译器中起什么作用?我得到: 错误:获取临时[-fppermissive]的地址 我可以通过向编译器提供-fppermissive标志来解决这个问题 编辑: 我刚刚找到导致临时地址错误部分的原因!我现在就要修复该部分。会导致编译器将一些实际上是错误(但某些编译器允许)的内容报告为警告,以允许代码编译,即使它不符合语言规则。你真的应该解决潜在的问题。发布演示问题的最小可编译代码示例 -f许可 将有关不符合代码的某些诊断从错误降级为警告。 因此,使用

我只是想知道
-fppermissive
标志在g++编译器中起什么作用?我得到:

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

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

编辑: 我刚刚找到导致临时地址错误部分的原因!我现在就要修复该部分。

会导致编译器将一些实际上是错误(但某些编译器允许)的内容报告为警告,以允许代码编译,即使它不符合语言规则。你真的应该解决潜在的问题。发布演示问题的最小可编译代码示例

-f许可

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

权利来源:

-f许可

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


底线:除非你知道自己在做什么,否则不要使用它

当你写了一些语言标准不允许的东西(因此不能真正成为定义良好的行为,这是不这么做的理由),但如果天真地输入到编译引擎中,恰好映射到某种可执行文件,然后,
-fpermissive
将执行此操作,而不是使用此错误消息停止。在某些情况下,该程序将完全按照您最初的预期运行,但除非您有一些非常特殊的理由不使用其他解决方案,否则您绝对不应该依赖它。

如果您想要一个实际的使用案例,请试着编译一个非常旧版本的X Windows,例如XFree86或About 2004中的XOrg,就在分裂前后——使用“现代”(cough)版本的gcc,如4.9.3

您会注意到构建cflag同时指定“-ansi”和“-pedantic”。理论上,这意味着“如果有任何东西稍微违反了语言规范,就炸掉它”。在实践中,gcc的3.x系列并没有捕捉到很多这样的东西,使用4.9.3构建它将在地面上留下一个冒烟的洞,除非您将CFLAGS和BOOTSTRAPCFLAGS设置为“-fppermissive”


使用该标志,大多数C文件将实际生成,让您可以自由移动到lexer将生成的依赖于版本的残骸

简单设置-fppermission而不费力的一种常见情况是:经过彻底测试并能正常工作的第三方库,如果没有-fppermission,它将无法在较新的编译器版本上编译。这些库是存在的,并且很可能不是应用程序开发人员需要解决的问题,也不是开发人员计划预算中需要解决的问题


设置-fpermissive,在这种情况下继续。

语言标准不允许的内容仍然可以很好地定义。事实上,几乎每个编译器都有定义良好的扩展。不要说这是允许性思维的所有例子,我希望得到比引用手册更多的信息+“在你知道你在做什么之前不要使用它”,从投票率最高的答案中。我不必用谷歌搜索这个。哪些情况下的不合格代码被精确降级?不合格代码被降级,但诊断是从错误到警告。提问者给出了一个例子。如果你不知道边缘情况可能是什么,你就不应该考虑使用它。对不起,没有冒犯,但是建议,比如“如果你不知道暗示,不要做任何事情”是微不足道的,适合每个问题,不回答任何问题。很抱歉,只是引用手册而没有详细说明是没有帮助的。尤其是在手册非常稀少的情况下。@johannes_lalala我认为一个好的经验法则是,如果(a)你认为你“知道你在做什么”;(B)行为被定义,(C)你在测试工具下运行它,以及(D)没有什么不好的事情发生,你可能知道你在做什么。上次我遇到其中一个,这个库是偶然工作的,实际上是在访问未初始化的内存,后来发现它在Mac上崩溃了。