我可以为gfortran使用哪些gcc编译器选项

Kev*_*ell 3 c gcc fortran gfortran compiler-options

我研究了“ 选项摘要”,gfortran但没有找到用于检测整数溢出的编译器选项。然后我在-fsanitize=signed-integer-overflow 这里找到了GCC(GNU编译器集合)标志选项并在调用时使用了它gfortran。它有效-可以在运行时检测到整数溢出!

那么-fsanitize=signed-integer-overflow在这里做什么呢?只是添加到gfortran某些检查整数溢出的机器级代码生成的机器代码中?

GCC(GNU编译器集合)标志选项gfortran编译器选项之间有什么关系 ?我可以为gfortran, g++etc 使用哪些gcc编译器选项?

Vla*_*r F 5

有GCC- GNU编译器集合。它共享通用的后端和中间端,并具有针对不同语言的前端。用于C,C ++和Fortran例如前端,其通常由命令调用gccg++gfortran

它实际上更复杂,您可以gcc在Fortran源代码和gfortranC源代码上调用,除了链接的库(有一些其他优点)之外,它的工作原理几乎相同。根据文件扩展名或所请求的语言,将调用适当的前端。

您几乎可以看到所有gcc提到的前端的所有GCC 标志(而不仅仅是)。有些标志是特定于语言的。通常您会收到类似的警告

gfortran -fcheck=all source.c
cc1: warning: command line option ‘-fcheck=all’ is valid for Fortran but not for C
Run Code Online (Sandbox Code Playgroud)

但该文件可以正常编译,该选项将被忽略,并且您会收到警告。注意它是一个C文件,并且可以通过gfortran命令编译。

消毒选项不是AFAIK特定语言,而是适用于GCC中实现的多种语言,也许有一些例外情况适用于某些明显的特定于语言的检查。特别是-fsanitize=signed-integer-overflow您询问的问题对于C和C ++来说都非常合适。有符号整数泛滥在C和C ++中是未定义的行为,并且Fortran标准不允许这样做(这实际上意味着相同,Fortran仅使用不同的词)。

  • GFortran手册中提到的选项在GFortran前端中实现,因此特定于Fortran。GCC手册包含仅适用于C,C ++的选项,通用的选项以及仅对特定目标(后端)有效的选项。这些选项中的某些选项可能与GFortran完美配合,而其他选项则可能无法。 (2认同)