当我在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
答案 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文件。