This question already has answers here:
difference between printing a memory address using %u and %d in C?
                                
                                    (5个答案)
                                
                        
                                4年前关闭。
            
                    
我知道%d用于int,%u用于无符号int,%p用于地址。
但是我的问题是我们可以在Windows机器上使用%u,%d打印地址,但是在Linux上无法做到这一点。

例如:

#include<stdio.h>

int main() {
    int x=15;
    int *p;
    p=&x;

    printf("%d \n",x);
    printf("%d \n",&x);
    printf("%u \n",&x);
    printf("%p \n",p);
    printf("%x \n",p);
    printf("%u \n",&p);

return 0;
}


输出:

15
2358812
2358812
000000000023FE1C
23fe1c
2358800


可以看出,使用%d和%u将十六进制值(23fe1c)更改为十进制。

但是,完全相同的代码在Unix / Linux上会产生错误。

错误:

format (%d) expects arguments of type 'int', but argument 2 has type 'int*'

最佳答案

GCC能够对可变参数进行类型检查,特别是使用format function attribute。这将强制检查作为可变参数传递的类型是否与提供的格式字符串完全匹配。

关于c - 为什么%u%d在UNIX/LINUX上不能用于打印地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33328007/

10-14 06:18