关于inttypes.h中的宏问题

时间:2020-12-11 00:52:13
刚看C primer plus中有个示例:
#include <stdio.h>
#include <inttypes.h>
int main (void) {

int16_t me16;
me16 = 4593;

printf ("me16 = %" PRId16 "\n", me16);
return 0;
}
" PRId16 "为什么也要用双引号呢?

7 个解决方案

#1


PRId16 的宏定义是什么?

宏就是简单替代。楼主把PRId16的宏定义简单拷贝过去,看看是什么。

#2


因为
# define PRId16 "d" 

PRId16 的定义两边也有个引号

#3


这样就只是d了

#4


对这个宏还真不熟悉。学习

#5


PRId16无定义无真相。

#6


<inttypes.h>定义PRId16为"hd".我是奇怪为什么在双引号中还有另一个双引号,直接写成"me16=%PRId16\n"不可以吗?

#7


你看错了 那两个引号不是加给 PRId16 宏的

应该这样看
printf ("me16 = %"
PRId16
"\n", me16); 

平时我们写代码时,如果字符串过长,一般都会分行写成这样
"上面一半"
"下面一半"

这样编译器编译时会自动合成
"上面一半下面一半"

所以PRId16应该是类似下面的定义
#defind PRId16 "d"

#1


PRId16 的宏定义是什么?

宏就是简单替代。楼主把PRId16的宏定义简单拷贝过去,看看是什么。

#2


因为
# define PRId16 "d" 

PRId16 的定义两边也有个引号

#3


这样就只是d了

#4


对这个宏还真不熟悉。学习

#5


PRId16无定义无真相。

#6


<inttypes.h>定义PRId16为"hd".我是奇怪为什么在双引号中还有另一个双引号,直接写成"me16=%PRId16\n"不可以吗?

#7


你看错了 那两个引号不是加给 PRId16 宏的

应该这样看
printf ("me16 = %"
PRId16
"\n", me16); 

平时我们写代码时,如果字符串过长,一般都会分行写成这样
"上面一半"
"下面一半"

这样编译器编译时会自动合成
"上面一半下面一半"

所以PRId16应该是类似下面的定义
#defind PRId16 "d"