当前位置: C语言 -- 标准库 -- <inttypes.h> -- SCN开头的宏

SCN开头的宏


概要:

以SCNdMAX为例。

#include <inttypes.h>
#define SCNdMAX character_string_literal

描述:

以下对象式宏会扩展为包含转换说明符的字符串字面量,其中转换说明符可能使用长度修饰符修饰;这些对象式宏适合在转换对应的整数类型时在格式化输入函数的格式参数中使用;这些对象式宏的通用格式为:SCN + 转换说明符 + 与ISO/IEC 9899:2024标准第7.22.2 Integer types节中类型名对应的名称;在这些对象式宏中,N表示ISO/IEC 9899:2024标准第7.22.2 Integer types节中描述的整数类型的宽度;例如:宏SCNdFAST32可用于格式化输入int_fast32_t类型整数。


以SCN开头的宏具体如下:

1、用于有符号整数的宏

SCNdN SCNdLEASTN SCNdFASTN SCNdMAX SCNdPTR
SCNiN SCNiLEASTN SCNiFASTN SCNiMAX SCNiPTR

2、用于无符号整数的宏

SCNbN SCNbLEASTN SCNbFASTN SCNbMAX SCNbPTR
SCNoN SCNoLEASTN SCNoFASTN SCNoMAX SCNoPTR
SCNuN SCNuLEASTN SCNuFASTN SCNuMAX SCNuPTR
SCNxN SCNxLEASTN SCNxFASTN SCNxMAX SCNxPTR

以SCN开头的宏可用于fscanf系列函数和fwscanf系列函数的格式化输入。


上述宏与ISO/IEC 9899:2024标准第7.22.2 Integer types节中整数类型的对应关系如下表所示:

宏 对应整数类型
SCNdN intN_t
SCNdLEASTN int_leastN_t
SCNdFASTN int_fastN_t
SCNdMAX intmax_t
SCNdPTR intptr_t

范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
/*SCN开头的宏范例*/

#include <inttypes.h>
#include <stdio.h>

int main(void)
{
    int32_t a;
    scanf("%"SCNd32, &a);
    printf("a = %"PRId32"\n", a);

    int_least32_t b;
    scanf("%"SCNdLEAST32, &b);
    printf("b = %"PRIdLEAST32"\n", b);

    int_fast32_t c;
    scanf("%"SCNdFAST32, &c);
    printf("c = %"PRIdFAST32"\n", c);

    intmax_t d;
    scanf("%"SCNdMAX, &d);
    printf("d = %"PRIdMAX"\n", d);

    intptr_t e;
    scanf("%"SCNdPTR, &e);
    printf("e = %"PRIdPTR"\n", e);

    return 0;
}


输出:

5

a = 5

10

b = 10

15

c = 15

20

d = 20

25

e = 25

GCC编译器<inttypes.h>头文件中上述宏定义如下:

#define SCNd32 "d"

#define SCNdLEAST32 "d"

#define SCNdFAST32 "d"

#define SCNdMAX "I64d"

#define SCNdPTR "d"


相关内容:
PRI开头的宏 用于格式化输出函数的宏。


主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018