gpt4 book ai didi

c - 如何在 C 中调试宏的技术

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:17 24 4
gpt4 key购买 nike

所以我有(大部分是诽谤)#define MAX( a, b ) ( ((a) > (b)) ? (a) : (b) )在程序的某个地方(是的,是的,我知道)。在代码中的某个点有一个比较 X>-1? ,其中 X 是(据我所知)一个(带符号的)整数。该行是 j += MAX(bmGs[i], bmBc[(int)y[i + j]] - m + 1 + i); , 其中y这是一个 char* .不足为奇,我发现宏正在返回 -1作为较大的数字(我猜 intunsigned 问题的数字太长,但我找不到它)。我想知道你们发现这些错误的技巧。

请注意,我并不是在征求关于是否使用该宏的编程建议,我敢肯定人们非常想告诉我我应该避免这样的事情,但问题是在其他地方。

谢谢。

最佳答案

我认为您的问题可能是标准 C 将通过将 -1 提升为无符号数量(保留值而不是保留符号)来比较有符号整数和无符号整数,这反过来意味着X 永远不会大于转换后的 -1,并且比较始终为假。如果我是对的,宏就是一条红鲱鱼;问题不在于宏本身(只要类型合理并且两个参数都没有副作用,它就可以正确编写并且可以正常工作)。

此代码是否为 Boyer-Moore 字符串搜索,如 Christian Charras and Thierry Lecroq 所述?

如果 bmGs 是无符号的但 bmBc 是有符号的,反之亦然,你会遇到问题,但两个数组在原始中都是有符号整数。

关于c - 如何在 C 中调试宏的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com