Matlab Coder 生成的变量名为 i386

3

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

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

line x: error: expected identifier or '(' before numeric constant

line y: error: lvalue required as left operand of assignment

line y+1: error: lvalue required as increment operand

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

两个问题:

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

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


我猜测token是MinGW编译器保留的,可能与同名架构有关。 - Reticulated Spline
2个回答

4

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

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

如何告诉Matlab不要使用这些名称生成变量?

您不需要这样做。相反,向编译器传递一个 -std=c... 选项以使其操纵符合标准的模式即可。


1
如果您遇到无法通过编译器标志修复的名称冲突,您可以使用 MATLAB Coder 中的 ReservedNameArray 配置设置
cfg = coder.config('lib');
cfg.ReservedNameArray = 'Name1;Name2';

codegen foo.m -config cfg

那将导致编程器混淆标识符,以避免与提供的名称冲突。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接