2

当我在 MATLAB 中创建一个 MEX 文件时,我习惯于创建一个.m具有相同名称的文件,一个与 MEX 文件相同的函数签名,否则只包含注释形式的帮助文本,然后一种类型时显示help myfcn

这样做时,一个小的副作用是 MATLAB 代码分析器会发现函数签名中指定的输入和输出参数未使用这一事实,并用橙色下划线标记它们。

最近我发现有几个 MathWorks 内部函数遵循与此模式类似的内容,但还包括以下行,在主要帮助文本中用空行分隔:

%#mex

这个%#mexpragma 似乎没有记录(至少我找不到任何对它的引用)。它似乎用于直接指示.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 编译器的 3.0 版(大约 MATLAB 6.5 R13):

%#mex

此编译指示通知 MATLAB 编译器选择 MEX 文件而不是现有 M 文件。

如果您使用%#functionpragma 定义 M 代码中不可用的函数,则应使用%#externalpragma 定义函数。例如:

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

这是另一个相关页面,解释了何时使用此编译指示:

现在可以从 Compiler 生成的独立应用程序中调用 MEX 文件。编译器将编译 MEX 文件,只要它们在命令行上指定或使用 -h 选项找到帮助函数。然后由独立代码加载和调用 MEX 文件。

如果一个 M-file 和一个 MEX-file 出现在同一目录中,并且 M-file 包含至少一个函数,Compiler 将编译 M-file 而不是 MEX-file。如果需要 MEX 文件,则必须使用 %#mex pragma。有关此 pragma 的更多信息,请参阅 %#mex 参考页。

当然,当时的 MATLAB 编译器是完全不同的产品,能够生成独立的 C/C++ 程序和 MEX 文件(不像今天的版本那样依赖于 MCR)

似乎mlint仍然可以识别此编译指示并完全将 M 文件排除在分析之外。

于 2013-09-12T23:26:38.480 回答