Gcc 可以检查 printf 参数是否匹配给定的格式。但这仅在 printf 的参数是 liternal 时才有效。显然,gcc 需要知道格式。
现在当代码本地化时,通常是需要本地化的格式。所以它是通过 gettext 传递的,但它不再是文字了,gcc 无法检查参数是否匹配。
有没有办法告诉 gcc 假设gettext
函数返回它的参数以进行检查?
当然,我可以使用禁用的本地化进行单独的构建来检查,但我想知道在主编译期间是否可以选择执行此操作。
这听起来像是 gcc 的format_arg
属性旨在做的事情:
该
format_arg
属性指定一个函数接受一个 , 或 style 函数的格式字符串printf
并scanf
修改它(例如,将其翻译成另一种语言),因此可以将结果传递给,或stylestrftime
函数(使用剩余的参数格式函数与未修改的字符串相同)。strfmon
printf
scanf
strftime
strfmon
如果没有,不确定为什么 gettext 不使用它。