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编译器选项?
有GCC- GNU编译器集合。它共享通用的后端和中间端,并具有针对不同语言的前端。用于C,C ++和Fortran例如前端,其通常由命令调用gcc,g++和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仅使用不同的词)。
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |