问题背景
在尝试将运行好的matlab代码群转为C++代码群的时候,在matlab自带的转换功能基础上,我需要考虑哪些代码是matlab内生的,哪些是我文件夹(也即提供的代码库包)中的呢?
如果可以区分的话,我就可以一个函数一个函数转换,然后注意输入输出即可了。
同时假设这个库里面.m文件特别多(一千多个),哪些函数是真正需要的呢?
检测代码调用
可以采用matlab的profile函数:
% profile的matlab代码
profile on
profile viewer
p = profile('info');
这个函数可以监测所有的后台信息,包括调用的函数和位置,最后也能生成html的报告《探查摘要》
去除matlab内生函数和重复项
可以通过调用函数的来源地址判别是否是自带的库中的:
% get p 中的 a 中的文件名,并且和你当前库的地址相匹配
m=a(i).FileName;
if length(m)>50
mm=m(1:51);
if mm==strcom
fileValues{k} = m;
k=k+1;
end
end
紧接着删除重复调用(某些代码中可能存在多个函数被调用的情况)并输出
这样可以确定库中的哪些函数没有被调用,再转为C++的时候可以很省力。
% 删除重复项并且把调用的m文件输出为csv
t2=unique(fileValues2');
fileID = fopen('functions used.csv', 'wt');
for row = 1:numel(t2)
fprintf(fileID, '%s\n', t2{row});
end
fclose(fileID);
其中在本库中被包含的m文件我才记录在上述csv中,而matlab安装时自带的函数,本身在转换成C++的时候也会自动转换,就不一一列出了。
比如在原库存代码中数量特别多,达七百多个的时候,大多数均可以删除,会增加效率。