小编Nun*_*uno的帖子

漏洞?MATLAB MEX 更改默认逻辑的类型

当通过 MEX 将一段 Fortran 2003(或更高版本)代码与 MATLAB 连接时,我惊讶地发现MEX 更改了默认逻辑. 这是致命的,因为一段完美编译的 Fortran 代码可能会因为类型不匹配而无法被 mexified,这种情况在我的项目中确实发生过。

\n

这是一个最小的工作示例。

\n

将以下代码命名为“test_kind.F”,在MATLAB中编译mex test_kind.F,然后test_kind在MATLAB中运行。这将生成一个名为 fort.99 的纯文本文件,其中包含两个数字“4”和“8”作为 WRITE 指令的结果。

\n
! test_kind.F\n! Tested by MATLAB 9.8.0.1323502 (R2020a) with GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0\n\n#include "fintrf.h"\n\n      subroutine mexFunction(nlhs, plhs, nrhs, prhs)\n\n      use ieee_arithmetic, only : ieee_is_nan\n      implicit none\n      mwPointer plhs(*), prhs(*)\n      integer nlhs, nrhs\n\n      write(99, *) kind(ieee_is_nan(1.0))  ! This prints a number in fort.99\n      write(99, *) kind(.false.)  ! A benchmark, …
Run Code Online (Sandbox Code Playgroud)

matlab fortran mex gfortran intel-fortran

7
推荐指数
1
解决办法
370
查看次数

空数组的边界检查——各种编译器的行为

更新20210914:Absoft 支持确认下面描述的af95/行为是无意的,并且确实是一个错误。af90Absoft 开发人员将努力解决这个问题。其他编译器在这方面的行为是正确的。感谢@Vladimir F 的回答、评论和建议。


我的印象是 Fortran 对于大小为 0 的数组很酷。但是,在 Absoft Pro 21.0 中,我遇到了涉及此类数组的(奇怪的)错误。相比之下,gfortranifortnagforpgfortransunf95g95都对同一段代码感到满意。

下面是一个最小的工作示例。

! testempty.f90

!!!!!! A module that offends AF90/AF95 !!!!!!!!!!!!!!!!!!!!!!!!
module empty_mod

implicit none
private
public :: foo

contains

subroutine foo(n)
implicit none
integer, intent(in) :: n
integer :: a(0)
integer :: b(n - 1)
call bar(a)  ! AF90/AF95 is happy with this line.
call bar(b)  ! AF90/AF95 is …
Run Code Online (Sandbox Code Playgroud)

fortran gfortran intel-fortran pgi-visual-fortran nag-fortran

2
推荐指数
1
解决办法
88
查看次数

预处理器是否扩展用引号括起来的宏?

像 cpp 和 fpp 这样的常见预处理器是否会扩展由一对引号括起来的宏?

我同时使用 cpp 和 fpp 尝试了以下代码,似乎引号内的宏没有展开。但是,我在有关 cpp 或 fpp 的任何文档中都没有找到此规则。任何人都可以指导我查看一些文档,以便我可以确定这种行为吗?谢谢。

#define X Y
X
"X"
'X'
Run Code Online (Sandbox Code Playgroud)

c unix preprocessor fortran

1
推荐指数
1
解决办法
157
查看次数