【发布时间】:2019-07-29 02:33:14
【问题描述】:
根据https://www.mathworks.com/help/matlab/apiref/mxisclass.html Fortran(还有 mxIsSingle 和 mxIsClass)的 mxIsDouble 的返回值为 INTEGER*4。
这是我的问题:
-
mxIsDouble 的声明是否应该一直是
整数*4 :: mxIsDouble ?
如果我将其声明为
INTEGER :: mxIsDouble
或
LOGICAL :: mxIsDouble ?
- 据说INTEGER*4不是标准的,应该换成kind。我该怎么做?我知道 INTEGER(KIND=4) 不正确。另外,为什么 mex 继续使用这样的非标准功能?
背景:我在为一些 Fortran 遗留代码编写 MATLAB 接口时遇到了这些问题。我在使用 Linux 的 64 位 PC 上工作,但我的目标是编写 portable mex 文件。
非常感谢!
【问题讨论】:
-
INTEGER*4从来都不是 Fortran 标准的一部分,那么它怎么会过时呢?您需要询问 Mathworks 为什么它继续使用非标准语法。只需使用INTEGER,因为此声明对应于默认整数类型。 -
在向 Mathsworks 抱怨他们损坏的界面和文档之后,最好的选择可能是查看标准模块 iso_fortran_env 中的常量 int32、real32 和 real64
-
谢谢@evets。我已经编辑了问题并将“过时”替换为“非标准”。如果我使用 INTEGER 来声明这些函数,尽管我的计算机上的默认整数是 64 位而函数返回 32 位整数,但一切都会正常工作吗?非常感谢!
-
您使用的是什么计算机和操作系统?默认
INTEGER的大小与默认REAL的大小相同,很可能是32 位。您可以使用STORAGE_SIZE内部函数以位为单位输出大小。 -
谢谢@Steve。我正在使用 64 位 MATLAB 的 Linux PC 上工作。在最近发布的 MATLAB(例如,MATLABR2018a)中,似乎我们不一定有“默认 INTEGER 与默认 REAL 的大小相同”。在我的电脑上,当使用选项 -largeArrayDims 时,默认的 INTEGER 是 64 位,而默认的 REAL 是 32 位。 STORAGE_SIZE 听起来很有用,但它只在 Fortran 2008 之后可用。我们在 Fortran90 中是否有类似的功能?非常感谢。
标签: matlab fortran mex matlab-deployment