众所周知,当你尝试使用类型规范不匹配的 printf() 系列函数时,GCC 会发出警告。在我们的代码中,我们有许多以下形式的实用函数:
int zzzprintf(DataType *dt, const char *format, ...) {
va_list args;
va_start(args, format);
int status = vprintf(dt->buf, format, args);
va_end(args);
return status
}
我希望看到的是围绕 zzzprintf() 函数的同一组警告语义,例如,如果您调用:
int64_t id64;
zzzprintf(dt, "Hello, %d\n", id64);
你收到警告:
/tmp/foo.c: In function ‘main’:
/tmp/foo.c:7:20: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int64_t’ {aka ‘long int’} [-Wformat=]
zzzprintf("Hello %d\n", id64);
~^ ~~
%ld
注意:我并不是要求增强 GCC 编译器。我正在寻找某种方式来告诉编译器期望这种行为,通过 #pragma 或类似的东西。我们目前正在使用 gcc-8.4.0,并且无法轻松升级我们的 gcc,因为我们暂时被锁定在 Ubuntu 18.04 上。