加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用预处理程序指令从数学方程生成的错误值

发布时间:2020-12-16 06:49:15 所属栏目:百科 来源:网络整理
导读:我有这个预处理器指令: #define INDEXES_PER_SECTOR BYTES_PER_SECTOR / 4 其中BYTES_PER_SECTOR在另一个头文件中声明为: #define BYTES_PER_SECTOR 64 我有这个简单的数学方程式,我写的在执行后我得到一个断言错误,因为分配给iTotalSingleIndexes的值不正
我有这个预处理器指令:

#define INDEXES_PER_SECTOR BYTES_PER_SECTOR / 4

其中BYTES_PER_SECTOR在另一个头文件中声明为:

#define BYTES_PER_SECTOR    64

我有这个简单的数学方程式,我写的在执行后我得到一个断言错误,因为分配给iTotalSingleIndexes的值不正确.

int iTotalSingleIndexes = (iDataBlocks - 29) / INDEXES_PER_SECTOR;

现在我认为这是因为预处理器指令INDEXES_PER_SECTOR.在执行我的等式时,iDataBlocks是285,这是正确的.我用gdb证实了这一点.问题是,当它应该是16时,分配给iTotalSingleIndexes的值是1.我真的不知道为什么会发生这种情况.

当我做的事情:

int iIndexesInASector = INDEXES_PER_SECTOR;
int iTotalSingleIndexes = (iDataBlocks - 29) / iIndexesInASector;

将正确的值分配给iTotalSingleIndexes.

在其他注释中,我在其他方程式中使用预处理器指令,它们工作正常,所以我更加困惑.

任何帮助将非常感激.

解决方法

预处理器只是执行令牌替换 – 它不会计算表达式.你的线路:

int iTotalSingleIndexes = (iDataBlocks - 29) / INDEXES_PER_SECTOR;

扩展到这个令牌序列:

int iTotalSingleIndexes = ( iDataBlocks - 29 ) / 64 / 4 ;

…由于/运算符的关联性,然后由编译器解析为:

int iTotalSingleIndexes = ((iDataBlocks - 29) / 64) / 4;

…导致值为1.正如leppie所说,你想要:

#define INDEXES_PER_SECTOR (BYTES_PER_SECTOR / 4)

这使INDEXES_PER_SECTOR扩展为完整的子表达式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读