【问题标题】:matlab coder - change format in created C codematlab coder - 在创建的 C 代码中更改格式
【发布时间】:2018-06-18 04:09:21
【问题描述】:

我正在使用 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个空格?

另外,我想将大括号放在单独的一行中。

【问题讨论】:

    标签: format matlab-coder


    【解决方案1】:

    如果您有 Embedded Coder,则配置设置 IndentSizeIndentStyle 允许您调整您请求的行为:

    https://www.mathworks.com/help/coder/ref/coder.embeddedcodeconfig.html?s_tid=doc_ta

    更一般地说,如果您正在寻找生成代码格式的进一步自定义,您可以考虑在其上运行外部代码格式化工具,例如 clang-format

    答案:

    https://www.mathworks.com/matlabcentral/answers/391533-is-there-a-way-to-disable-line-wrapping-in-generated-c-code-from-matlab-coder

    展示了如何实现自动化。为了完整起见,我将在此处重现这些步骤。

    Coder 配置设置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 列。

    这种方法的主要缺点是其他 Coder 样式设置,如 IndentStyleIndentSize 等,需要在您的 clang-format 规范中指定。

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 2014-06-09
      • 2018-06-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多