gpt4 book ai didi

c - 如何明智地解释这个编译器警告?

转载 作者:太空狗 更新时间:2023-10-29 17:24:05 25 4
gpt4 key购买 nike

当我执行这个 question 的代码时,我收到了这个警告:

warning: format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=]
printf("P-Q: %d, P: %d, Q: %d", (p - q), p, q);
~^ ~~~~~~~
%ld

作为条件反射修复,我使用 %ld 来打印两个指针的减法。编译器同意了。

幸运的是,我看到另一个用户的评论提到应该使用%td,因为减法的结果类型是ptrdiff_t。这answer证实了这一说法。

现在来自 GCC 的头文件 stddef.h , 我可以看到这些类型在这种情况下是等价的:

typedef __PTRDIFF_TYPE__ ptrdiff_t;
#define __PTRDIFF_TYPE__ long int

但是,我只是想建议对 OP 进行错误(或多或少)的修复,使用 %ld,而不是 %td

有没有一种方法可以让我明白仅靠编译器警告是不够的?或者也许明智地解释了警告本身,而不仅仅是使用react。

最佳答案

我不认为你能说出来。这取决于编译器作者的意图/谨慎/聪明。

也许他决定他将始终支持 %ld,而 %td 是预期的,或者他只是不知道/不能/不愿意给出更详细/正确的消息.如有疑问,您最后的选择就是标准。

这似乎不是一个可移植的结构,对于“正统”,您应该支持两种格式说明符。

关于c - 如何明智地解释这个编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51057861/

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