C11 和 C17 标准都使用术语“转换说明符”和“格式说明符”。它们是同义词吗?如果是,那么为什么要引入同义词?如果不是,那么它们之间有什么区别?
问问题
90 次
3 回答
3
“格式说明符”似乎只是一个半正式的术语。唯一使用该术语的规范文本是inttypes.h
标题 7.8.1,没有提供“格式说明符”是什么的解释。由于类型的性质,尽管inttypes.h
将大小和类型/签名混合到一个术语中stdint.h
。它说d
inPRId32
是一个转换说明符,然后PRId32
整体应该是一个格式说明符?而 fprintf/fscanf 将例如“长度修饰符”和“转换说明符”分开,其中l
in%ld
将是长度修饰符和d
转换说明符。
fprintf 和 fscanf 函数定义了术语转换规范,例如 C17 7.21.6.1,强调我的:
每个转换规范都由字符 % 引入。在 % 之后,依次出现以下内容:
- 零个或多个标志...
- 可选的最小字段宽度...
- 可选精度
- 可选的长度修饰符
- 一个转换说明符字符,它指定要应用的转换类型。
以上也是术语转换说明符的正式定义。然后这些函数列出有效的转换说明符d, i, f
,依此类推。
看起来“格式说明符”和转换说明的意思是一样的。
于 2021-06-02T13:19:10.103 回答
2
独立于标准,这令人困惑,看其他答案,所以只看这些术语在英语中的含义,我倾向于说
“转换说明符”描述了数据转换自或转换为的本机类型(int、char、double),而“格式说明符”描述或包括表示(字段长度、填充)。
于 2021-06-02T13:29:53.107 回答
-1
格式说明符仅指定转换的格式(即'f'),其中转换说明符表示整个说明符(即%*13lf)。
我从这个答案中举了一个例子: C中的转换规范和格式说明符有什么区别?
于 2021-06-02T12:55:08.383 回答