如何确保vfprintf具有适当数量的参数?

Tom*_*Tom 3 c

我在C中有一个变量参数函数,看起来大致如下:

void log(const char * format, ...) {

  va_list args;
  va_start(args, format);
  vfprintf( stderr, format, args );
  va_end(args);
  exit(1);
}

我可以这样通过callilng崩溃我的应用程序,

log("%s %d", 1);

因为函数缺少一个参数.有没有办法确定运行时缺少参数?

Rol*_*lig 5

不,没有.但是当你使用gcc编译代码时,你应该添加选项-Wall -Wextra -Wformat -Os.这将启用许多警告,当您使用__attribute__(__printf__, 2, 3)或类似的东西注释您的功能时(我不记得确切的语法),应该出现针对您的情况的警告.

有关确切的语法,请参阅http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html.真的__atttribute__((__format__(__printf__, 1, 2))).