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扩展为完整的子表达式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |