c/c++语言开发共享printf指针参数类型警告?

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

 #include  int main (void) { unsigned long *test = 1; printf("%lun", (unsigned long*)test); return 0; } 

警告:format指定类型’unsigned long’但参数具有类型

     unsigned long *test = 1; 

    无效C.如果要指向值为1的对象,可以执行以下操作:

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

    或使用C99复合文字:

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

    现在还:

     printf("%lun", (unsigned long*)test); 

    是不正确的。 你真的想要:

     printf("%lun", *test); 

    打印unsigned long object *test

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

     printf("%pn", (void *) test); 

    你不需要进行类型转换test ,%p将采用任何指针(即使规范说它需要一个空*)。 使用%p转换说明符是通过printf打印指针的最安全(并且令人惊讶,最便携)的机制。

     #include  int main (void) { unsigned long ul = 1; unsigned long *test = &ul; printf("%pn", test); return 0; } 

    编辑:哦是的,并且还要小​​心尝试使用intlong等类型依赖于它们的类型大小。 这是依赖于实现的,并且可以(并确实)在这些平台的不同平台和编译器上进行更改。 C标准只是说long必须至少与int一样大。 printf “length modifiers”的POSIX标准不指定位大小,而是指定C类型。 因此,你不能假设sizeof(long) == sizeof(void*) (好吧,他们在Linux内核中做出了这个假设,但它与gcc结合在一起,总是如此)。

      以上就是c/c++开发分享printf指针参数类型警告?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/544634.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐