我目前正在将一些用于 32 位 Matlab 的 C MEX 文件移植到 64 位 Matlab。
在此过程中,我遇到了两种类型,一种来自 Matlab 人,一种是 C 标准。
这就是 Matlab 文档所说的mwSize
:
mwSize
(C 和 Fortran)输入尺寸值
描述
mwSize
是一种表示大小值的类型,例如数组维度。使用此功能可实现跨平台灵活性。默认情况下,mwSize
等价int
于 C。使用mex -largeArrayDims
开关时,mwSize
等价size_t
于 C。在 Fortran 中,mwSize
类似地等价于INTEGER*4
orINTEGER*8
,基于平台和编译标志。
这就是维基百科所说的size_t
:
size_t
是由多个 C/C++ 标准(例如,C99 ISO/IEC 9899 标准)定义的无符号数据类型,在stddef.h
.[1] 中定义。它可以通过包含来进一步导入,stdlib.h
因为该文件内部子包含stddef.h
[2]。此类型用于表示对象的大小。采用或返回大小的库函数期望它们属于这种类型或返回类型为
size_t
. 此外,最常用的基于编译器的运算符sizeof
应计算为与 兼容的值size_t
。的实际类型
size_t
取决于平台;一个常见的错误是假设size_t
与 相同unsigned int
,这可能会导致编程错误,[3][4] 例如,从 32 位架构迁移到 64 位架构时。
据我所知,这些类型实际上是相同的。我的问题是:
- 他们是吗?
- 如果是的话,哪一个会被认为是更好的编程品味?理想情况下,我们希望我们的代码也与未来的 Matlab 版本兼容。我猜答案是
mwSize
,但我不确定。
编辑:我应该补充一点,Matlab 的人都在使用它们。例如:
size_t mxGetN(const mxArray *pm);
是一个检索 mxArray 的列数的函数。然而,当一个人创建一个矩阵时,一个人使用,
mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity ComplexFlag);
其中输入显然应该是 mwSize。