Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 术语“格式说明符”是术语“转换说明符”的同义词吗?_C_Language Lawyer_C11_C17 - Fatal编程技术网

C 术语“格式说明符”是术语“转换说明符”的同义词吗?

C 术语“格式说明符”是术语“转换说明符”的同义词吗?,c,language-lawyer,c11,c17,C,Language Lawyer,C11,C17,C11和C17标准都使用术语“转换说明符”和“格式说明符”。它们是同义词吗?如果是,为什么要引入同义词?如果否,那么它们之间的区别是什么?格式说明符仅指定转换的格式,即“f”,其中转换说明符表示整个说明符,即%*13lf 我从这个答案中选取了一个例子: 格式说明符似乎只是一个半正式的术语。唯一使用该术语的规范性文本是inttypes.h标题7.8.1,没有解释格式说明符是什么。由于stdint.h类型的性质,尽管inttypes.h将大小和类型/符号性混合到一个术语中。它说PRId32中的d是一

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

格式说明符仅指定转换的格式,即“f”,其中转换说明符表示整个说明符,即%*13lf

我从这个答案中选取了一个例子:
格式说明符似乎只是一个半正式的术语。唯一使用该术语的规范性文本是inttypes.h标题7.8.1,没有解释格式说明符是什么。由于stdint.h类型的性质,尽管inttypes.h将大小和类型/符号性混合到一个术语中。它说PRId32中的d是一个转换说明符,然后PRId32作为一个整体被认为是一个格式说明符?fprintf/fscanf将例如长度修饰符和转换说明符分开,其中%ld中的l将是长度修饰符,d将是转换说明符

fprintf和fscanf函数定义术语转换规范,例如C17 7.21.6.1,强调:

每个转换规范都由字符%引入。之后,将执行以下操作: 按顺序出现:

零个或多个标志。。。 可选的最小字段宽度。。。 可选精度 可选的长度修改器 一种转换说明符字符,用于指定要应用的转换类型。 以上也是术语转换说明符的正式定义。然后这些函数列出有效的转换说明符,如d、i、f等


看来格式说明符和转换规范的含义是一样的。

与标准无关,这在其他答案中是令人困惑的,因此仅从英语中这些术语的含义来看,我倾向于说


转换说明符描述数据转换的本机类型int、char、double,而格式说明符描述或包括表示字段长度、填充。

我认为格式说明符是更广泛的术语,表示转换或长度说明符等。这是一种草率的书写。术语转换说明符有一个正式的定义:7.21.6/4指定要应用的转换类型的转换说明符字符。然后它说转换说明符和它们的含义是:d,i等等。所以我不确定你的答案或你链接到的答案是否正确。啊,等等,现在再次阅读链接。他并不是说转换说明符就是整个说明符。他说转换规范是整个说明符。转换说明符似乎描述了本机类型int、char、double,而格式说明符似乎描述/包括表示字段长度、填充。@PaulOgilvie inttypes.h格式说明符列表,例如PRId32作为格式说明符。现在,printf%.3 PRId32,int32_{1};中的内容是什么;。整个%.3 PRId32应该是一个转换规范。PRId32可能是一个格式说明符。和d a转换说明符。其中%ld中的l将是长度说明符:长度说明符还是长度修饰符?C11:如果不存在l长度修饰符,则int参数将转换为无符号字符,并写入结果字符。在哪一节中提到了长度说明符?@pmor这将是一个拼写错误,应该是修饰符。但对于那些试图实现编译器的人来说,这还不够好。标准不应该草率地使用未定义的术语。不过,stdio.h的总体设计是草率的。@Lundin,我认为我的定义相当准确。但是有一些混合,例如%d和%x,它们都是转换int和表示十六进制。适当的说明符可以是%xd,这意味着要打印十六进制表示的int转换。@Lundin草率地设计了stdio.h。stdio.h的其他哪些部分设计得马虎?你能举个例子吗?@pmor提到正确设计的零件会更容易。我认为也许删除、重命名和放置功能设计正确,没有问题。stdio.h的其余部分要么存在设计缺陷、已知陷阱,要么就是毫无理性。printf/scanf函数族可能保持着对人类造成金钱损失的世界纪录。在任何编程语言中,我想不出任何其他函数可以接近。当然,在C语言中还有无数其他标准函数被破坏,但没有一个被频繁使用。