GCC 和 Clang 都支持对变量参数函数进行编译时检查,例如printf
。这些编译器接受如下语法:
extern void dprintf(int dlevel, const char *format, ...)
__attribute__((format(printf, 2, 3))); /* 2=format 3=params */
在 OSX 上,Cocoa 框架也使用此扩展NSString
:
#define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A)))
在我们公司,我们有一个自定义的 C++ 框架,其中包含一堆类,例如BaseString
全部源自BaseObject
. In BaseString
有一些类似于变量参数的方法sprintf
,但有一些扩展。例如,"%S"
需要一个类型参数BaseString*
, and "%@"
期望一个BaseObject*
争论。
我想对我们项目中的参数进行编译时检查,但由于扩展,__attribute__((format(printf)))
给出大量误报警告。
有没有办法自定义支持__attribute__((format))
对于两个编译器之一?如果这需要对编译器源代码进行修补,是否可以在合理的时间内完成?或者,还有其他的吗lint像可以执行检查的工具?