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;
但这并不能解决问题。
任何帮助将不胜感激!谢谢!
最佳答案
问题出在这里:
您可以这样定义宏:
#define NRBF 21
#define NRBF1 NRBF+1
当你写下这个:
base = a*NRBF1;
预处理器将 NRBF1
文本替换为 21+1
,结果如下:
base = a*21+1;
但你的本意是这样的:
base = a*(21+1);
因此您需要像这样定义宏:
#define NRBF1 (NRBF+1)
关于c - C 中整数的错误乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47430112/