fortran - Fortran 是否有未定义的行为?
问题描述
在 C 和 C++ 中,有许多导致未定义行为的操作,即允许编译器做任何事情的情况。示例包括在释放变量后使用变量、释放变量两次以及取消引用空指针。
Fortran 是否也有未定义的行为?我查看了规范草案,但没有在其中找到任何内容。例如,在释放后使用变量是否会保证程序崩溃,或者它可能会默默地做错事?
解决方案
是的,它有。它只是叫法不同。您可以做很多事情,并且会使您的代码不符合标准,因此不需要处理器(编译器)诊断这种不合格(当然,必须诊断出许多偏差)。通常情况类似于 C 未定义行为的情况(例如访问数组越界、有符号整数溢出……)。我们只是说代码不符合标准,这意味着标准没有规定这种代码的结果。此类代码未涵盖但标准,因此如果某些编译器(处理器)确实编译它并且您运行它,则可能会产生任何结果。
这与依赖于处理器的行为不同,后者是标准的并且仅依赖于实现。
只需在 StackOverflow 上搜索即可为您提供大量示例。像将相同的实体传递给具有不同意图的未定义行为的参数吗? Fortran 和 MPI_Reduce 如何处理整数溢出?
这个答案只是回答了所提出的问题,但并未尝试列出 Fortran 中可能发生的所有可能类型的 UB。
推荐阅读
- xml - 带有命名空间的不相交的 xml 文件
- ethereum - 保护关于solidity的敏感信息的最佳实践?
- python - Python 3.9:从日期时间(元组)的错误时区偏移
- php - wordpress首页的分页问题
- chainlink - 在构建 Chainlink.Request 时,Chainlink 中的 path 和 copyPath 有什么区别?
- javascript - 获取 TypeError:“路径”未定义:使用 JavaScript 为 Windows 执行串行端口程序时未定义
- javascript - Mongodb连接不上
- haskell - 堆栈似乎没有应用包修订
- javascript - 在 c# 中将对象作为函数参数传递,就像在 javascript 中一样
- angular - 我可以更改离子搜索栏角度的样式吗?