私は現在、32ビットMatlab用のいくつかのCMEXファイルを64ビットMatlabに移植する作業を行っています。
そうしている間に、私は2つのタイプに遭遇しました。1つはMatlabの人々からのもので、もう1つはC標準です。
これは、Matlabのドキュメントが言っていることmwSize
です:
mwSize
(CおよびFortran)サイズ値の入力
説明
mwSize
配列の次元などのサイズ値を表すタイプです。クロスプラットフォームの柔軟性のためにこの関数を使用してください。デフォルトでmwSize
は、はCと同等です。スイッチint
を使用する場合は、Cと同等です。Fortranでは、プラットフォームとコンパイルフラグに基づいて、またはと同等になります。mex -largeArrayDims
mwSize
size_t
mwSize
INTEGER*4
INTEGER*8
これはウィキペディアが言っていることですsize_t
:
size_t
は、。[1]で定義されているいくつかのC / C ++標準(C99 ISO / IEC 9899標準など)で定義されている符号なしデータ型です。このファイルの内部には[2]が含まれているためstddef.h
、含めることでさらにインポートできます。stdlib.h
stddef.h
このタイプは、オブジェクトのサイズを表すために使用されます。サイズを取得または返すライブラリ関数は、サイズがこのタイプであるか、戻りタイプが。であることを想定しています
size_t
。さらに、最も頻繁に使用されるコンパイラベースの演算子sizeof
は、と互換性のある値に評価する必要がありますsize_t
。実際のタイプ
size_t
はプラットフォームに依存します。size_t
よくある間違いは、と同じであると想定することですunsigned int
。これは、たとえば32ビットアーキテクチャから64ビットアーキテクチャに移行するときに、プログラミングエラー[3][4]につながる可能性があります。
私が見る限り、これらのタイプは実際には同じです。私の質問は次のとおりです。
- 彼らは?
- もしそうなら、どちらを使用するのがより良いプログラミングの好みと見なされますか?理想的には、コードが将来のMatlabリリースとも互換性があることを望んでいます。答えは
mwSize
だと思いますが、よくわかりません。
編集:Matlabの人々が両方を使用していることを追加する必要があります。例えば:
size_t mxGetN(const mxArray *pm);
mxArrayの列数を取得する関数です。ただし、行列を作成するときは、
mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity ComplexFlag);
ここで、入力は明らかにmwSizeである必要があります。