我有一个MATLAB(R2020b(函数,我正试图使用MATLAB编码器将其转换为(Linux兼容(C程序。该函数接受3个字符串参数,如下所示:
function func1(a, b, c)
我希望生成的C函数接受3个char*
参数:
extern void func1(const char *a, const char *b, const char *c);
为了完成这项工作,我正在通过以下脚本运行MATLAB编码器:
cfg = coder.config('dll','ecoder',false);
cfg.GenerateReport = true;
cfg.ReportPotentialDifferences = false;
cfg.GenerateComments = false;
cfg.RuntimeChecks = true;
cfg.GenCodeOnly = true;
cfg.HardwareImplementation.TargetHWDeviceType='Generic->64-bit Embedded Processor (LP64)';
cfg.DataTypeReplacement = 'CBuiltIn';
%% Define argument types for entry-point 'func1'.
ARGS = cell(1,1);
ARGS{1} = cell(3,1);
ARGS{1}{1} = coder.typeof('X',[Inf Inf],[1 1]);
ARGS{1}{2} = coder.typeof('X',[Inf Inf],[1 1]);
ARGS{1}{3} = coder.typeof('X',[Inf Inf],[1 1]);
%% Invoke MATLAB Coder.
codegen -config cfg func1 -args ARGS{1} -c
运行脚本后,得到的函数签名是:
extern void func1(const emxArray_char_T *a, const emxArray_char_T *b, const emxArray_char_T *c);
看起来,尽管我已经明确设置了cfg.DataTypeReplacement = 'CBuiltIn'
,但MATLAB Coder已经生成了MathWorks typedef,而不是内置的C数据类型。
我的问题是-为什么?如何修复此问题以生成内置数据类型
不幸的是,从MATLAB Coder R2021a起,不支持为可变大小的字符串生成使用char*的代码。目前,当使用可变大小的字符串时,MATLAB Coder总是生成采用emxArray_char_T*(用于C代码生成(或Coder::array(用于C++代码生成的默认值(的代码。