【问题标题】:Using coder.extrinsics conditionally有条件地使用 coder.extrinsics
【发布时间】:2015-06-15 15:43:19
【问题描述】:

这个问题指的是 Matlab coder 外在功能。像fprintf 这样的一些函数在较旧的 Matlab 版本中是外在的,而在较新的版本中不是外在的。有没有办法支持多个Matlab版本,如果coder.extrinsics只允许在顶层,并且不能放在if语句下?

【问题讨论】:

    标签: matlab matlab-coder


    【解决方案1】:

    您不能有条件地直接将某些函数设为外部函数。一种方法是使用两个不同的函数,例如 fprintf_old 和 fprintf_new。 fprintf_old 将具有 coder.extrinsic 声明,然后调用 fprintf。 fprintf_new 可以在没有外部声明的情况下调用 fprintf。现在,您可以通过在编译期间使用恒定条件检查您的版本来在两个调用之间进行选择。例如,

    if coder.const(isOlderVersion())
      fprintf_old();
    else
      fprintf_new();
    end
    

    【讨论】:

      【解决方案2】:

      在代码生成中,feval constructs an extrinsic call 指向第一个参数中命名的函数。由于您可以在控制流中嵌入对feval 的调用,因此可以使用它来选择性地从外部调用函数并将代码保存在单个源文件中:

      if isOlderVersion()
        % Call fprintf extrinsically
        feval('fprintf');
      else
        fprintf();
      end
      

      【讨论】:

        猜你喜欢
        • 2016-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        相关资源
        最近更新 更多