printf 的 "precision" 说明符的类型是什么?

What's the type of the "precision" specifier for printf?

假设我使用以下 printf() 说明符字符串:

printf("%.*s", length, str);

要求 printf()print the first length characters in str。问题是 length 有哪种类型?我在文档中只看到 整数 的简短提及。

所以看起来是int。然后看起来当字符串很长时我不能使用以下代码:

const char* startOfString = ...    
const char* middleOfString = ...
printf("%.*s", (int)( middleOfString - startOfString ), startOfString);

看来我不能用这种方式输出超过 INT_MAX 个字符。

那么精度是哪种类型?是 int 还是 size_t 还是其他?

它是一个 int,这样你不能打印超过 INT_MAX 个字符。

来自 C 标准,§ 7.21.6.1,段落。 5:

a field width, or precision, or both, may be indicated by an asterisk. In this case, an int argument supplies the field width or precision.