代码之家  ›  专栏  ›  技术社区  ›  Kevin Powell

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

  •  3
  • Kevin Powell  · 技术社区  · 7 年前

    我学习过 Option Summary for gfortran 但未找到用于检测整数溢出的编译器选项。然后我找到了GCC(GNU编译器集合)标志选项 -fsanitize=signed-integer-overflow here gfortran公司 . 它可以工作——可以在运行时检测到整数溢出!

    那么是什么呢 -fsanize=有符号整数溢出 你在这里做什么?只是添加到由生成的机器代码中 一些检查整数溢出的机器级部件?

    两者之间的关系是什么 GCC (GNU Compiler Collection) flag options gfortran compiler options ? 我可以使用哪些gcc编译器选项 gfortran, g++

    2 回复  |  直到 7 年前
        1
  •  5
  •   Vladimir F Героям слава    7 年前

    有GCC- GNU Compiler Collection . 它共享公共后端和中间端,并具有不同语言的前端。例如,C、C++和Fortran的前端通常由命令调用 gcc , g++ gfortran .

    实际上更复杂,你可以打电话 gfortran公司 在C源代码上,除了被链接的库之外,它的工作原理几乎相同(还有其他一些优点)。将根据文件扩展名或请求的语言调用相应的前端。

    您可以查看几乎所有GCC(不仅仅是 通用条款

    gfortran -fcheck=all source.c
    cc1: warning: command line option ‘-fcheck=all’ is valid for Fortran but not for C
    

    但是该文件可以很好地编译,该选项被忽略,您将得到一个警告。注意,它是一个C文件,由 gfortran公司

    -fsanitize=signed-integer-overflow 你所问的对C和C++都很好。符号整数过流在C和C++中是未定义的行为,Fortran标准不允许这种行为(这实际上意味着相同,Fortran只使用不同的词)。

        2
  •  3
  •   Norman Gray    7 年前

    收集 )与llvm一样,是 three-stage compiler .

    • 然后中间端(糟糕的名称,但巧妙的位)将该AST重新组织为另一个AST,该AST在语义上等价,但更容易转化为机器代码。
    • 然后后端将重组后的AST转换为一个或其他处理器的汇编程序,可能会在此过程中进行特定于平台的微优化。

    因此,各种选项特定于阶段1、2或3,但可能无法方便地标记为这样;然而,考虑到这一点,你可以凭直觉合理地判断哪些与你感兴趣的特定语言相关,哪些与你感兴趣的特定语言无关。


    (正是出于这种原因,我将武断地宣称CC++FortranJavaPerlPython本质上是一种单一的语言,只有微不足道的语法和库细节来区分方言)。

    推荐文章