【发布时间】:2017-11-22 08:38:24
【问题描述】:
Simulink 中的 C 编码 S-Function 显示不正确的行为,我已设法将问题缩小到整数乘法不正确。
在代码的开头,我有类似的内容:
#define NRBF 21
#define NRBF1 NRBF+1
然后,在脚本中的一个函数中:
void function_name(SimStruct *S, const int_T a)
{
...
int_T base;
base = a*NRBF1;
printf("%i\t", a);
printf("%i\t", NRBF1);
printf("%i\n", base);
..
}
现在,如果a=0、NRBF=21,我有(而不是base=0)
0 22 1
如果a=1,NRBF=21,我有(如预期的base=22)
1 22 22
如果a=2,NRBF=21,我有(而不是base=44)
2 22 43
现在,我必须说我有点困惑。我试图将乘法的行更改为
base = a* (int_T)NRBF1;
但这并不能解决问题。
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
a*NRBF1扩展为a*21+1。使用括号,如#define NRBF1 (NRBF+1) -
重复候选人:stackoverflow.com/questions/3719150/…。可能还有其他人。
标签: c c-preprocessor