这一行:
if ((next_parse_point - current_parse_point) > p_chars_per_line)
产生以下警告:
warning: possible ptrdiff_t overflow
要修复它,我已完成以下操作:
if (((ptrdiff_t)next_parse_point - (ptrdiff_t)current_parse_point) > p_chars_per_line)
我以为我能够简单地将减法的返回结果转换为ptrdiff_t
,而不是必须转换每个参数,例如:
if ((ptrdiff_t)(p1-p2) > charsPerLine ) ...
但会发出同样的警告。
有人可以提供一个表演,或指向我所缺少的东西吗?
答案 0 :(得分:2)
这里的解释大致如下:
很容易看到8位值发生这种情况 - 如果A = 150且B = 10,那么减法的结果将是无符号8位值中的140,即有符号值中的-116 - 显然,如果您将该值输入比较,则存在危险。在现实生活中,如果你的两个指针超过你的地址空间的一半,这只会是一个危险,这在现在的32位环境中并非完全不可能。
我的建议是:
if((current_parse_point + pchars_per_line) > next_parse_point))
或
或