2

MATLAB で MEX ファイルを作成するとき、MEX ファイル.mと同じ関数シグネチャを持つ同じ名前のファイルも作成する習慣があります。それ以外の場合は、コメント形式のヘルプ テキストだけを含みます。タイプすると表示されますhelp myfcn

これを行うと、MATLAB コード アナライザーが関数シグネチャで指定された入力引数と出力引数が未使用であるという事実を検出し、オレンジ色の下線でフラグを立てるという小さな副作用があります。

最近、いくつかの MathWorks の内部関数がこのパターンに似ていることを発見しましたが、メインのヘルプ テキストから空白行で区切られた次の行も含まれています。

%#mex

この%#mexプラグマは文書化されていないようです (少なくとも、それへの参照は見つかりません)。.mファイルが MEX ファイルのヘルプ テキストを提供することのみを目的としていることを直接示すために使用されているようです。ファイル内のコード アナライザー メッセージを抑制する効果があります。

%#mexプラグマの使用目的に詳しい人はいますか? コード アナライザー メッセージを抑制する以外の影響はありますか?

例:

\toolbox\compiler\mcc.m
\toolbox\images\images\private\ddist.m
\toolbox\matlab\audiovideo\private\readavi.m
\toolbox\matlab\imagesci\hdf.m
\toolbox\matlab\sparfun\arpackc.m
\toolbox\matlab\specgraph\private\ditherc.m
4

1 に答える 1

2

どうやらこれは古いリリースで文書化されていました。以下は、MATLAB Compiler のバージョン 3.0 (MATLAB 6.5 R13 頃) までさかのぼるアーカイブ ドキュメントのページです。

%#mex

このプラグマは、MATLAB Compiler に、既存の M ファイルよりも MEX ファイルを選択するように通知します。

%#functionプラグマを使用して M コードで使用できない関数を定義する場合は、プラグマ%#externalを使用して関数を定義する必要があります。例えば:

function y = gamma(x)
    %#mex
    error('gamma MEX-file is missing');

このプラグマがいつ使用されるかを説明する別の関連ページを次に示します。

コンパイラで生成されたスタンドアロン アプリケーションから MEX ファイルを呼び出すことができるようになりました。Compiler は、MEX ファイルがコマンド ラインで指定されているか、ヘルパー関数を検索する -h オプションを使用して配置されている場合は常に MEX ファイルをコンパイルします。次に、MEX ファイルが読み込まれ、スタンドアロン コードによって呼び出されます。

M ファイルと MEX ファイルが同じディレクトリにあり、M ファイルに少なくとも 1 つの関数が含まれている場合、コンパイラは MEX ファイルではなく M ファイルをコンパイルします。代わりに MEX ファイルが必要な場合は、%#mex プラグマを使用する必要があります。このプラグマの詳細については、%#mex リファレンス ページを参照してください。

もちろん、当時の MATLAB Compiler は完全に異なる製品であり、スタンドアロンの C/C++ プログラムと MEX ファイルを生成できました (現在のバージョンのような MCR 依存関係はありません)。

mlintこのプラグマはまだ認識されており、M ファイルは分析から完全に除外されているようです。

于 2013-09-12T23:26:38.480 に答える