c - printf 指针参数类型警告?

标签 c clang

有什么好的方法可以消除以下警告吗?我知道这是一个类型问题,因为我传递的是 unsigned long 指针 而不是 unsigned long,但是 printf 是否以某种方式支持指针作为参数?我内心的迂腐希望摆脱这个警告。如果没有,如何使用 printf 处理打印取消引用的指针值?

#include <stdio.h>

int main (void) {
    unsigned long *test = 1;
    printf("%lu\n", (unsigned long*)test);
    return 0;
}

警告:格式指定类型“unsigned long”,但参数具有类型

最佳答案

unsigned long *test = 1;

不是有效的 C。如果您想要一个指向值为 1 的对象的指针,您可以这样做:

unsigned long a = 1;
unsigned long *test = &a;

或使用 C99 复合文字:

unsigned long *test = &(unsigned long){1UL};

现在还有:

printf("%lu\n", (unsigned long*)test);

不正确。你实际上想要:

printf("%lu\n", *test);

打印unsigned long对象*test的值。

要打印 test 指针值(以实现定义的方式),您需要:

printf("%p\n", (void *) test);

关于c - printf 指针参数类型警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56691096/

相关文章:

unicode - 变量名称的 clang Unicode 字符

c++ - 如何将 C 输出文件读入 Matlab

c - 想要 printf 的解决方案

c - fork() 父子进程的输出

c++ - OCLint ASTMatcher 规则。匹配 NS_ENUM

c++ - 了解链接器重复符号错误的根源

c - C语言中如何处理同名函数

c++ - 从 C 调用 C++ 代码

c++ - 在没有 clang 警告的情况下在 C++11 中非平凡地初始化模板类的静态成员

c++ - enable_if 的句法模式