我学习了关于
那么
gfortran
的选项总结,但没有找到检测整数溢出的编译器选项。后来我在这里发现了GCC(GNU编译器集合)标志选项-fsanitize=signed-integer-overflow
并在调用gfortran
时使用它。它有效 - 整数溢出可以在运行时检测到!那么
-fsanitize=signed-integer-overflow
在这里做了什么?只是向由gfortran
生成的机器代码添加一些检查整数溢出的机器级别代码吗?
GCC(GNU编译器集合)标志选项和gfortran编译器选项之间有什么关系?我可以为gfortran,g++
等使用哪些gcc编译器选项?
gcc
实际上是指GCC(问题已经更新)。如果使用了错误的标志选项,编译器会发出警告,这很棒。然而,对于那些不会抱怨的选项,有些是不起作用的!!!例如,-fsanitize=bounds
和-fsanitize=integer-divide-by-zero
都不适用于gfortran
。因此,我猜当调用gfortran
编译器时,仍然可以使用来自GCC的非特定语言的标志选项,但不应依赖这些标志选项。只有针对特定编译器记录的那些编译器选项才能保证起作用。 - Kevin Powell