为什么要打印两个指针减去警告的结果?

Why trying to print the result of subtraction of two pointers throwing warning?

我正在尝试减去 2 个指针,这样它们就可以给出 elements.I 可以编译程序和 运行 的数量。但是编译后它会抛出错误

pointerarithmetic.c: In function ‘main’:
pointerarithmetic.c:9:8: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]
 printf("%d",(q-p));

代码:

#include<stdio.h>

    int main(){
    int a[5]={0,10,20,30,40};
    int *p,*q;
    p=&a[0];
    q=&a[2];
    printf("%d",*p);
    printf("%d",*q);
    printf("%d",(q-p));
    return 0;
    }

预期的输出应该是元素的数量。

指针相减 return 类型 ptrdiff_t(在 stddef.h 中定义),而不是 int。

使用%td打印结果。