我使用Matlab编码器将代码移植到C,例如对于下一个功能:
function sum_out = my_sum( x )
sum_out = 0;
for i=1:size(x,1)
sum_out = sum_out + x(i);
end
end
生成的C代码是:
double my_sum(const double x[10])
{
double sum_out;
int i;
sum_out = 0.0;
for (i = 0; i < 10; i++) {
sum_out += x[i];
}
return sum_out;
}
有没有办法让缩进4个空格?
另外,我想将大括号括在一个单独的行中。
答案 0 :(得分:1)
如果你有嵌入式编码器,配置设置IndentSize
和IndentStyle
可以让你调整你所要求的行为:
https://www.mathworks.com/help/coder/ref/coder.embeddedcodeconfig.html?s_tid=doc_ta
更一般地说,如果您正在寻找对生成代码格式的进一步自定义,您可以考虑在其上运行外部代码格式设置工具,如clang-format
。
答案:
显示了如何实现自动化。为了完整起见,我将重现这里的步骤。
编码器配置设置PostCodeGenCommand
允许您在代码生成完成之后但在C / C ++编译器运行之前运行一些MATLAB代码。因此,您可以使用它来调用clang-format
。
制作文件doclangformat.m
:
function doclangformat(buildInfo)
sourceFiles = join(buildInfo.getSourceFiles(true,true));
sourceFiles = sourceFiles{1};
cmd = ['clang-format -i -style=''{BasedOnStyle: LLVM, ColumnLimit: 20}'' ' sourceFiles];
system(cmd);
我已将ColumnLimit
设置为20,因此效果显而易见。代码将被彻底包装。您可以在clang-format documentation。
设置配置对象并调用codegen
:
cfg = coder.config('lib');
cfg.PostCodeGenCommand = 'doclangformat(buildInfo)';
codegen foo -config cfg <other codegen args>
现在您应该看到您的代码被包装到大约20列。
这种方法的主要缺点是需要在IndentStyle
规范中指定其他编码器样式设置,如IndentSize
,clang-format
等。