Разница между size_t и mwSize при компиляции MEX-файлов C для Matlab

В настоящее время я работаю над портированием некоторых MEX-файлов C для 32-разрядного Matlab на 64-разрядный Matlab.

При этом я столкнулся с двумя типами: одним из которых является разработчик Matlab, а другим который является стандартом C.

Это то, что документация Matlab говорит о mwSize :

mwSize (C и Fortran)

Тип для значений размера

Описание

mwSize - это тип, представляющий значения размера, например размеры массива. Используйте эту функцию для кросс-платформенной гибкости. По умолчанию mwSize эквивалентно int в C. При использовании переключателя mex -largeArrayDims mwSize эквивалентно size_t в C. В Фортране mwSize аналогичным образом эквивалентен INTEGER * 4 или INTEGER * 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-разрядную, для пример.

Насколько я понимаю, эти типы фактически одинаковы. У меня следующие вопросы:

  1. Есть ли?
  2. Если да, то какой из них лучше использовать в программировании? В идеале мы хотели бы, чтобы наш код также был совместим с будущими выпусками Matlab. Я предполагаю, что ответ - mwSize , но я не уверен.

Edit: я должен добавить, что люди Matlab используют оба. Например:

size_t mxGetN(const mxArray *pm);

- это функция, которая получает количество столбцов в mxArray. Однако, когда создается матрица, используется,

mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity ComplexFlag);

, где вход, очевидно, должен быть mwSize.

10
задан Cris Luengo 29 March 2019 в 13:43
поделиться