当我在gdb下编译一个C ++应用程序并使用printf()时,它给出了与格式字符串的一致性和传入的参数有关的令人敬畏的警告。
例如,这段代码:
printf("%s %s", "foo");
导致编译器警告“格式参数太少”,这非常有用。 它还会提供有关格式字符串类型与参数类型的警告。 它必须检查格式字符串并将其与提供的参数类型进行比较。 - 这种编译时内省可以添加到普通源代码中,还是需要编译成gcc本身的东西?
fwiw这是在os x的gcc 4.2.1下。
答案 0 :(得分:9)
你可以为你自己的类似printf的函数(以及scanf / strftime / strfmon函数)做这样的事情:
#define PRINTF_FORMAT_CHECK(format_index, args_index) __attribute__ ((__format__(printf, format_index, args_index)))
void my_printf(const char *fmt, ...) PRINTF_FORMAT_CHECK(1, 2);
有关详细信息,请参阅gcc manual。