2015-06-15 41 views
0

此问题涉及Matlab 编码器外部功能。一些功能如fprintf在旧版Matlab中是外在的,在新版本中不是外在的。如果coder.extrinsics只允许在最高级别,并且不可能将它放在if声明中,是否有方法可以支持多个Matlab版本?有条件地使用coder.extrinsics

回答

2

你不能有条件地直接做一些外部函数。一种方法是使用两个不同的函数,如fprintf_old和fprintf_new。 fprintf_old会有coder.extrinsic声明,然后调用fprintf。 fprintf_new可以在不需要外部声明的情况下调用fprintf。现在你可以通过在编译期间检查你的版本,并在编译期间保持不变的情况下选择这两个调用。例如,

if coder.const(isOlderVersion()) 
    fprintf_old(); 
else 
    fprintf_new(); 
end 
1

在代码生成中,feval constructs an extrinsic call指向第一个参数中指定的函数。既然你可以嵌入调用feval控制流程的内部,它可以被用来选择性外在调用一个函数,并保持代码的单一源文件:

if isOlderVersion() 
    % Call fprintf extrinsically 
    feval('fprintf'); 
else 
    fprintf(); 
end