1

Gcc 可以检查 printf 参数是否匹配给定的格式。但这仅在 printf 的参数是 liternal 时才有效。显然,gcc 需要知道格式。

现在当代码本地化时,通常是需要本地化的格式。所以它是通过 gettext 传递的,但它不再是文字了,gcc 无法检查参数是否匹配。

有没有办法告诉 gcc 假设gettext函数返回它的参数以进行检查?

当然,我可以使用禁用的本地化进行单独的构建来检查,但我想知道在主编译期间是否可以选择执行此操作。

4

1 回答 1

2

这听起来像是 gcc 的format_arg属性旨在做的事情:

format_arg属性指定一个函数接受一个 , 或 style 函数的格式字符串printfscanf修改它(例如,将其翻译成另一种语言),因此可以将结果传递给,或stylestrftime函数(使用剩余的参数格式函数与未修改的字符串相同)。strfmonprintfscanfstrftimestrfmon

如果没有,不确定为什么 gettext 不使用它。

于 2013-05-15T07:19:30.787 回答