【发布时间】:2016-06-21 08:15:45
【问题描述】:
是否有一个标准的 C/C++ 函数,给定 printf 格式字符串,返回它期望的参数数量?例如:
num_printf_args("%d %s") == 2;
num_printf_args("%.1f%%") == 1;
num_printf_args("%*d") == 2;
仅计算格式字符串中% 的数量将是第一个近似值,这在第一个示例中有效,但显然不适用于第二个和第三个示例。
我知道 gcc 可以做到这一点,因为在编译时它会抱怨实际传递给 printf 的参数数量(以及它们的类型)与格式字符串不匹配。
【问题讨论】:
-
在 ISO/IEC 9899:1999(语言标准)中没有这样的功能。不完全确定:2011,但我不这么认为。它是由 GCC 实现的扩展。
-
如果没有关于参数类型的信息,为什么会有用?
-
它不是语言的一部分,而是特定的 gcc 扩展。请参阅 gcc's Function Attributes 中的
format。 -
按照我的理解,你有 fixed 格式字符串,
printf将从中返回 输出的字符数,你有 variadic 函数将接受可变数量的参数,但没有printf返回预期的conversions 数量。这并不是说您不能创建一个 wrapper 来解析格式字符串的内容并返回预期的转换次数,并且如果提供了您的列表,还可以为这些参数提供类型检查。 -
@n.m. 如果没有关于参数类型的信息,为什么它会有用? 计算预期参数的数量实际上是确定参数应该是什么的先决条件。您必须先知道他们的在哪里,然后才能知道他们是什么,而知道他们在在哪里意味着知道数字。
标签: c