c - C 中整数的错误乘法

标签 c c-preprocessor

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=0NRBF=21,我有(而不是base=0)

0  22  1

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

1  22  22

如果a=2NRBF=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/

相关文章:

c - 如何在C中的结构中打印字符串

c - 使用内核模块挂载文件系统

c++ - 使用 bcc32 生成预处理文件

c - "Expected identifier or ' ( ' before int"尝试同时使用定义和函数时出错

java单字节字符编码

c - -fstack-usage 对于叶函数是否错误?

macros - 用于测试的 C 宏 : "If more than one defined"

使用预处理器将外部函数指针更改为外部指针

c - 删除 HTTP header 信息

c - 我不明白的预处理器宏