2015-06-15 43 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