问题

开发时遇到一个问题,同一份代码要分别编译跑在 32 位和 64 位 CPU 上,部分代码如下

uint64_t a;
char a_str[20] = {0};a = 0x1234;
sprintf(a_str, "%llu", a);

使用 64 位编译器,编译报警告:uint64_t 是 long unsigned int 类型,请使用 "%ld"
然后改成 “%ld”,使用 32 位机器编译时,又报警告了:uint64_t 是 long long unsigned int 类型,请使用 "%lld"

两者不能得兼?

解决

后来查到可以使用 PRIu64 宏,即代码改为如下:

uint64_t a;
char a_str[20] = {0};a = 0x1234;
sprintf(a_str, "%"PRIu64, a);

两种编译器都不报警告了。

探究

PRIu64 的定义在 inttypes.h 头文件里。

# if __WORDSIZE == 64
#  define __PRI64_PREFIX    "l"
# else
#  define __PRI64_PREFIX    "ll"
# endif# define PRIu64      __PRI64_PREFIX "u"

可以看到,
32 位编译器,会把 "%"PRIu64 扩展为 "%lld"
64 位编译器,会把 "%"PRIu64 扩展为 "%ld"
解决了这个问题。

C语言 PRIu64 宏相关推荐

  1. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  2. c 语言程序设计阚道宏,C语言用宏实现静态多态

    综述 多态性是面向对象程序设计的一个重要特征. 在C++语言中,多态指的是:具有不同功能的函数可以用同一个函数名,可以用一个函数名调用不同内容的函数. C++的多态分为两种: 1. 静态多态性(编译时 ...

  3. C语言 va_arg 宏 - C语言零基础入门教程

    目录 一.前言 二.va_arg 简介 三.va_arg 使用 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.前言 对 printf ...

  4. C语言 va_end 宏 - C语言零基础入门教程

    目录 一.前言 二.va_end 简介 三.va_end 使用 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.前言 对 printf ...

  5. C语言 va_start 宏 - C语言零基础入门教程

    目录 一.前言 二.va_start 简介 三.va_start 使用 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.前言 对 pr ...

  6. c语言用宏定义常量_使用宏定义常量以在C的数组声明中使用

    c语言用宏定义常量 As we know that, while declaring an array we need to pass maximum number of elements, for ...

  7. C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解

    宏定义是用一个标识符来表示一个字符串,在宏调用中将用该字符串代替宏名.给程序员提供了便利,使程序更加清晰,便于阅读和理解,进一步提高了程序的运行效率,对于嵌入式系统而言,为了能达到性能要求,宏是一种很 ...

  8. 【C语言】----宏定义,预处理宏

    什么是宏? 宏是学习任何语言所不可缺少的,优秀的宏定义可以使得代码变得很简洁且高效,有效地提高编程效率. 宏是一种预处理指令,它提供了一种机制,可以用来替换源代码中的字符串,解释器或编译器在遇到宏时会 ...

  9. c语言中宏定义的字符替换#define M(x,y,z) x*y+z

    C语言中宏定义的字符替换问题 例子: 在c语言中定义如下宏 #define M(x,y,z) x*y+z 给定如下程序 #include<stdio.h> #include<stdl ...

最新文章

  1. 计算机文化基础知识在未来工作中的应用论文,大学计算机文化基础论文范文2篇...
  2. 技术人生:我喜欢年纪不断变大
  3. oracle分区list,Oracle 分区表中存在range-list表分区时遇到问题及解决办法
  4. boost::hana::on用法的测试程序
  5. 怎么调试EXC_BAD_ACCESS错误
  6. 一起谈.NET技术,NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询
  7. Android(java)学习笔记27:TextView属性大全
  8. 颈椎病分型及对症治疗
  9. 恩智浦智能车大赛2020_我院第十三届“恩智浦”杯智能车校内选拔赛宣讲会顺利举行...
  10. 开源的Linphone SIP 电话存在栈漏洞,可远程使客户端设备崩溃
  11. linux下赋予普通用户管理员权限
  12. 【系统设计】大神三分钟搞懂领域驱动设计
  13. minitab学习系列(1)--二项式分布过程能力分析
  14. 波浪线html,js中的波浪线符号作用(按位非(~)符号)
  15. CAD组合成块,CAD合并成块,CAD炸开后再合并,CAD中炸开的图块合并在一起
  16. 阿里云,AWS和DigitalOcean:云服务比较
  17. 【云原生|中间件】我们为什么要使用DCM?
  18. Python库turtle的趣味性用法,欢迎来品尝。
  19. Delphi医保支付【支持重庆,湖南,湖北,河南,江苏,黑龙江,吉林等医保接口】
  20. UNIX 标准化 --ISO C标准 IEEE POSIX 标准 Single Unix Specification(SUS)

热门文章

  1. linux镜像文件没有gho,【iso文件中没有gho文件】iso变gho_iso文件里没有gho-系统城...
  2. codevs 2977 二叉堆练习1x
  3. Python selenium 爬取淘宝商品
  4. Java同步器之AbstractOwnableSynchronizer详解
  5. CDA数据分析师考察内容包括哪些
  6. win7安装centOS双系统超详细(转)
  7. 《星际争霸》单位语音中英文完全版
  8. C语言用数组实现十个国家名字按字典排序
  9. B2C电子商务系统研发
  10. 什么是 计算机文档,电脑上哪个 我的文档是干什么用的