【问题标题】:Variable named i386 generated by Matlab CoderMatlab Coder 生成的名为 i386 的变量
【发布时间】:2020-05-29 09:38:18
【问题描述】:

我正在为具有多个可变大小数组的函数生成代码。代码需要在linux(使用gcc)和windows机器(使用MinGW)上编译。

为了“确保容量”这些变量,Matlab 创建了几个计数器变量,命名为i349i350、...、i386、...i400。显然,Windows 编译器不喜欢这样。它抛出两个错误,说:

第 x 行:error: expected identifier or '(' before numeric constant

第 y 行:error: lvalue required as left operand of assignment

第 y+1 行:error: lvalue required as increment operand

这些都是通过手动选择其他变量名来解决的。虽然我可以使用一些脚本来自动执行此操作,但我宁愿避免使用它。

两个问题:

  1. 为什么这些变量名会导致编译器出现问题?

  2. 如何告诉 Matlab 不要生成具有这些名称的变量?

【问题讨论】:

  • 我猜这个令牌是 MinGW 编译器保留的,可能与同名的the architecture 有关。

标签: c matlab gcc mingw matlab-coder


【解决方案1】:

为什么这些变量名会导致编译器出现问题?

这些是编译器预定义的宏。这是非标准行为,但用于向后兼容以确定代码正在编译的系统。

如何告诉 Matlab 不要生成具有这些名称的变量?

你不想。相反,将-std=c... 选项传递给编译器,让它在标准兼容模式下运行。

【讨论】:

    【解决方案2】:

    如果您遇到无法通过编译器标志修复的名称冲突,您可以将 ReservedNameArray config setting 与 MATLAB Coder 一起使用:

    cfg = coder.config('lib');
    cfg.ReservedNameArray = 'Name1;Name2';
    
    codegen foo.m -config cfg
    

    这将导致 Coder 破坏标识符不与提供的名称冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 2012-10-08
      • 2015-07-15
      • 1970-01-01
      相关资源
      最近更新 更多