首页 > 解决方案 > Fortran 是否有未定义的行为?

问题描述

在 C 和 C++ 中,有许多导致未定义行为的操作,即允许编译器做任何事情的情况。示例包括在释放变量后使用变量、释放变量两次以及取消引用空指针。

Fortran 是否也有未定义的行为?我查看了规范草案,但没有在其中找到任何内容。例如,在释放后使用变量是否会保证程序崩溃,或者它可能会默默地做错事?

标签: fortran

解决方案


是的,它有。它只是叫法不同。您可以做很多事情,并且会使您的代码不符合标准,因此不需要处理器(编译器)诊断这种不合格(当然,必须诊断出许多偏差)。通常情况类似于 C 未定义行为的情况(例如访问数组越界、有符号整数溢出……)。我们只是说代码不符合标准,这意味着标准没有规定这种代码的结果。此类代码未涵盖但标准,因此如果某些编译器(处理器)确实编译它并且您运行它,则可能会产生任何结果。

这与依赖于处理器的行为不同,后者是标准的并且仅依赖于实现。

只需在 StackOverflow 上搜索即可为您提供大量示例。像将相同的实体传递给具有不同意图的未定义行为的参数吗? Fortran 和 MPI_Reduce 如何处理整数溢出?

这个答案只是回答了所提出的问题,但并未尝试列出 Fortran 中可能发生的所有可能类型的 UB。


推荐阅读