2

C11 和 C17 标准都使用术语“转换说明符”和“格式说明符”。它们是同义词吗?如果是,那么为什么要引入同义词?如果不是,那么它们之间有什么区别?

4

3 回答 3

3

“格式说明符”似乎只是一个半正式的术语。唯一使用该术语的规范文本是inttypes.h标题 7.8.1,没有提供“格式说明符”是什么的解释。由于类型的性质,尽管inttypes.h将大小和类型/签名混合到一个术语中stdint.h。它说dinPRId32是一个转换说明符,然后PRId32整体应该是一个格式说明符?而 fprintf/fscanf 将例如“长度修饰符”和“转换说明符”分开,其中lin%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 回答