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

标签 c gcc fortran gfortran compiler-options

我学习了Option Summary for gfortran但发现没有编译器选项来检测整数溢出。然后我找到了 GCC(GNU 编译器集合)标志选项 -fsanitize=signed-integer-overflow here并在调用 gfortran 时使用它。它有效——可以在运行时检测到整数溢出!

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

GCC (GNU Compiler Collection) flag options之间有什么关系和 gfortran compiler options ?我可以对 gfortran、g++ 等使用哪些 gcc 编译器选项?

最佳答案

有海湾合作委员会 - GNU Compiler Collection 。它共享公共(public)后端和中间端,并具有适用于不同语言的前端。例如,C、C++ 和 Fortran 的前端通常由命令 gccg++gfortran 调用。

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

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

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

但是该文件将正常编译,该选项将被忽略,您将收到有关该问题的警告。请注意,它是一个 C 文件,并且由 gfortran 命令编译而成。

据我所知,清理选项不是特定于语言的,并且适用于 GCC 中实现的多种语言,也许对于一些明显特定于语言的检查有一些异常(exception)。特别是您询问的 -fsanitize=signed-integer-overflow 对于 C 和 C++ 来说都可以完美工作。有符号整数溢出是 C 和 C++ 中未定义的行为,并且 Fortran 标准不允许这样做(这实际上意味着相同,Fortran 只是使用不同的单词)。

关于c - 我可以为 gfortran 使用哪些 gcc 编译器选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46080068/

相关文章:

c - Notepad++ 和 NppExe 没有显示输出

c++ - 通过分发目标文件加速编译

c++ - GCC 的矢量化失败

fortran - 从 Fortran 中的特定行号开始读取

更改系统头文件路径和自定义头文件

c - 如何使用 FILE* 作为其 stdin、stdout 或 stderr 创建子进程?

c - 根据 K&R,我正在努力可视化指向变量的指针

linux - ldd 依赖项

fortran - 文件不存在时的异常处理

optimization - 快速计算 3D 数组中相邻点的方法