0

我正在使用标志 /check:uninit 在调试模式下编译我的 Fortran 代码,该标志在属性 -> Fortran -> 运行时 -> 检查未初始化的变量下激活。

我注意到,当我运行我的代码时,有时执行会正确停止指示未初始化的变量,有时它会继续运行而没有问题,并且仅单步执行我的代码我发现某处我有一个值为 -6.277438562204192D+066 的变量。为什么编译器并不总是能够检测到未初始化的变量?

在特定情况下,我提到未检测到的变量是模块中定义的全局变量,我不确定这是否有问题,也许编译器只能检测到本地未初始化的变量?如果是这种情况,我如何检测全局未初始化的变量?

4

1 回答 1

1

通常,我用来在运行时valgrind检测未初始化的变量。

我不确定在编译时ifort需要什么作为参数,但你也需要启用优化:.gfortran-Wuninitialized -O

可能会有所帮助。

编辑:根据英特尔的说法,您必须在检查未初始化的变量时禁用ifort优化。

编辑:我不知道如何使用Windows找到未初始化的变量,但我来自英特尔论坛的帖子

我们目前确实提供了一种有限形式的运行时未初始化变量检查,尽管它可能太有限而无用。拥有 Fortran Studio XE 或 Parallel Studio XE(或 Cluster Studio XE)许可证的用户可以使用静态分析功能进行整个程序的正确性检查,包括未初始化的变量检测。它也不是完美的,但它可能非常有帮助。

也许您可以使用该工具。

于 2013-10-18T16:38:11.867 回答