C中的整数乘法不正确

Enr*_*ini -2 c c-preprocessor

Simulink中的C编码S函数显示不正确的行为,我设法将问题缩小到不正确的整数乘法.

在代码的开头,我有类似的东西:

#define NRBF       21
#define NRBF1  NRBF+1
Run Code Online (Sandbox Code Playgroud)

然后,在脚本中的函数我有:

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);
..
}
Run Code Online (Sandbox Code Playgroud)

现在,如果a=0,NRBF=21我有(而不是base=0)

0  22  1
Run Code Online (Sandbox Code Playgroud)

如果a=1,NRBF=21我有(如预期的那样base=22)

1  22  22
Run Code Online (Sandbox Code Playgroud)

如果a=2,NRBF=21我有(而不是base=44)

2  22  43 
Run Code Online (Sandbox Code Playgroud)

现在,我必须说我有点困惑.我试图将乘法的行改为

base = a* (int_T)NRBF1;
Run Code Online (Sandbox Code Playgroud)

但它没有解决问题.

任何帮助将不胜感激!谢谢!

Jab*_*cky 5

问题出在这里:

您可以像这样定义宏:

#define NRBF       21
#define NRBF1  NRBF+1
Run Code Online (Sandbox Code Playgroud)

当你写这个:

base = a*NRBF1;
Run Code Online (Sandbox Code Playgroud)

预处理器以NRBF1文本方式替换以下21+1结果:

base = a*21+1;
Run Code Online (Sandbox Code Playgroud)

但你打算这样:

base = a*(21+1);
Run Code Online (Sandbox Code Playgroud)

因此,您需要像这样定义您的宏:

#define NRBF1  (NRBF+1)
Run Code Online (Sandbox Code Playgroud)