使用GCC,我可以指定__attribute__((format(printf, 1, 2))),告诉编译器该函数采用printf格式说明符的vararg参数.
这在我包装例如vsprintf函数系列的情况下非常有用.我可以有
extern void log_error(const char *format, ...) __attribute__((format(printf, 1, 2)));
每当我调用这个函数时,gcc将检查参数的类型和数量是否与printf一样符合给定的格式说明符,如果没有则发出警告.
Microsoft C/C++编译器是否有类似的东西?
如果我使用不好的术语,请提前道歉.
当我在gdb下编译一个C++应用程序并使用printf()时,它给出了与格式字符串的一致性和传入的参数有关的令人敬畏的警告.
例如,这段代码:
printf("%s %s", "foo");
Run Code Online (Sandbox Code Playgroud)
导致编译器警告"格式参数太少",这非常有用.它还会提供有关格式字符串类型与参数类型的警告.它必须检查格式字符串并将其与提供的参数类型进行比较. - 这种编译时内省可以添加到普通源代码中,还是需要编译成gcc本身的东西?
fwiw这是在os x的gcc 4.2.1下.