PRI开头的宏
概要:
以PRIdMAX为例。
#include <inttypes.h> #define PRIdMAX character_string_literal
描述:
以下对象式宏会扩展为包含转换说明符的字符串字面量,其中转换说明符可能使用长度修饰符修饰;这些对象式宏适合在转换对应的整数类型时在格式化输出函数的格式参数中使用;这些对象式宏的通用格式为:PRI + 转换说明符 + 与ISO/IEC 9899:2024标准第7.22.2 Integer types节中类型名对应的名称;在这些对象式宏中,N表示ISO/IEC 9899:2024标准第7.22.2 Integer types节中描述的整数类型的宽度;例如:宏PRIdFAST32可用于格式化输出int_fast32_t类型整数。
fprintf和fwprintf系列函数的行为应像是使用va_arg时,其类型实参命名的是将宏对应类型使用默认参数提升后得到的类型,然后将va_arg扩展结果转换成宏对应的类型。
以PRI开头的宏具体如下:
1、用于有符号整数的宏
| PRIdN | PRIdLEASTN | PRIdFASTN | PRIdMAX | PRIdPTR |
| PRIiN | PRIiLEASTN | PRIiFASTN | PRIiMAX | PRIiPTR |
2、用于无符号整数的宏
| PRIbN | PRIbLEASTN | PRIbFASTN | PRIbMAX | PRIbPTR |
| PRIoN | PRIoLEASTN | PRIoFASTN | PRIoMAX | PRIoPTR |
| PRIuN | PRIuLEASTN | PRIuFASTN | PRIuMAX | PRIuPTR |
| PRIxN | PRIxLEASTN | PRIxFASTN | PRIxMAX | PRIxPTR |
| PRIXN | PRIXLEASTN | PRIXFASTN | PRIXMAX | PRIXPTR |
| PRIBN ① | PRIBLEASTN ① | PRIBFASTN ① | PRIBMAX ① | PRIBPTR ① |
① 这些宏是可选的。如果实现支持B转换说明符,这些宏应定义;如果实现不支持B转换说明符,这些宏不应被定义。
② 以PRI开头的宏可用于fprintf系列函数和fwprintf系列函数的格式化输出。
上述宏与ISO/IEC 9899:2024标准第7.22.2 Integer types节中整数类型的对应关系如下表所示:
| 宏 | 对应整数类型 |
| PRIdN | intN_t |
| PRIdLEASTN | int_leastN_t |
| PRIdFASTN | int_fastN_t |
| PRIdMAX | intmax_t |
| PRIdPTR | intptr_t |
范例:
|
|
输出:
a = 5
b = 10
c = 15
d = 20
e = 25
GCC编译器<inttypes.h>头文件中上述宏定义如下:
#define PRId32 "d"
#define PRIdLEAST32 "d"
#define PRIdFAST32 "d"
#define PRIdMAX "I64d"
#define PRIdPTR "d"
相关内容:
| SCN开头的宏 | 用于格式化输入函数的宏。 |
主要参考资料: