foo
スタンドアロンアプリケーションで使用される(つまり、を使用して実行可能ファイルにコンパイルされる)関数mcc -m
があり、重要な中間結果が得られるとしbar
ます。通常、関数の完了後にこの中間結果は必要ないため、戻り値ではありません。ただし、開発とデバッグの目的で、この中間結果にアクセスできるようにすると便利です。これはassignin
、中間結果をデバッグワークスペースに配置するために使用できます。
ここで問題となるのassignin
は、スタンドアロンコンパイルでは不可能であり、コードにが含まれmcc
ているとエラーが発生することassignin
です。私がやりたいのはassignin
、コードがインタラクティブに実行される場合のみを含め、スタンドアロンアプリケーションとしてコンパイルする場合は含めないことです。さらに、スタンドアロンアプリケーションでは中間結果が必要ないため、スタンドアロンアプリケーションで割り当てを行わないことで、時間やメモリを同時に処理できるため、処理速度が向上します。他のプログラミング環境では、これをデバッグおよびリリースモードでのコンパイルと呼びます。
疑似MATLABの場合:
function res = foo()
bar = some complicated formula
if ~standalone
assignin('debug', 'foo_bar', bar)
end
res = some complicated formula involving bar
問題は、を表現する方法がif ~standalone
わからないことです。まず、スタンドアロンモードであるかどうかをテストする方法がわかりませんが、さらに重要なことに、これは、実際にmccが保護されたものを完全に無視するようにするコード構造である必要があります。スタンドアロンモードではassigninをコンパイルできないため、コードブロックを実行し、コンパイルを試みないでください。
余談ですが、これは中間結果だけでなく、追加のデータ収集にも役立ちます。追加のデータは、保護されたブロックで計算され、を介してエクスポートされassignin
ます。明らかに、そのような余分なデータは、何の目的も果たさないため、スタンドアロンバージョンでは計算しないでください。
これを可能にするようなコード構造がmatlabにありますか、それともより良い代替手段がありますか?これまで、私はコメントされたコードをジャグリングし、開発プロセスを進めながらデバッグコードのコメントを外して再コメントしていました。