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

标签 c clang

有什么好的方法可以去掉下面的警告吗?我知道这是一个类型问题,因为我传递的是 unsigned long pointer 而不是 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/16224917/

相关文章:

在主体中定义 name_fn 的函数的 C 原型(prototype)

c - C 中的可移植嵌套函数

c++ - 如何编写eclipse插件格式化C++14源码?

c - 程序不会打印 txt 文件中的所有行

c - 编译大量代码生成的源文件的任何提示?

c - 无符号溢出与 C 中的模数运算符

c,如何在 if 语句中使用 char 变量?

c++ - zlib 的奇怪分析结果

macos - 使用 clang 从 cpp 文件和静态库创建动态库

ios - 如何为Xcode6制作插件