%#mex pragma有什么作用?

时间:2013-09-12 22:57:09

标签: matlab code-analysis mex pragma suppress-warnings

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

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

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

%#mex

这个%#mex编译指示似乎没有记录(至少我找不到任何引用)。 它似乎用于直接指示.m文件仅用于为MEX文件提供帮助文本。它具有抑制文件中任何代码分析器消息的效果。

是否有人熟悉%#mex pragma的预期用途?它是否还有其他抑制代码分析器消息的效果?

示例:

\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

1 个答案:

答案 0 :(得分:2)

显然,旧版本中记录了这一点。这是归档文档中的page,一直回到MATLAB编译器3.0版(大约MATLAB 6.5 R13):

  

%#mex

     

该pragma通知MATLAB编译器选择MEX文件   现有的M档案。

     

如果您使用%#function pragma来定义函数   在M代码中不可用,您应该使用%#external编译指示   定义功能。例如:

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

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

  

现在可以从Compiler生成的文件中调用MEX文件   独立应用程序。编译器将在任何时候编译MEX文件   它们在命令行中指定或使用-h定位   查找辅助函数的选项。然后将加载MEX文件   由独立代码调用。

     

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

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

mlint似乎仍然认识到这个pragma并完全排除了分析中的M文件。