我在网络上看到Clang的-Wformat=2
选项的很多提及,有时还有众所周知的-Wformat
(Xcode列出为“Typecheck对printf
/scanf
的调用,尽管现在涵盖了更多的字符串格式API)。”
-Wformat
有什么不同(如果有的话)? 最佳答案
它是从GCC借来的,因为它被设计为可以替代的合适产品。 GCC's description:
那回答了您的大多数问题。
是的。以下程序根据-Wformat=2
的存在(或不存在)发出不同的警告:
__attribute__((__format__ (__printf__, 1, 2)))
static void F(const char* const pString, ...) {
}
int main(int argc, const char* argv[]) {
F("", 0);
F(argv[0], 0);
const char str[] = "aaa";
F(str, 0);
F("%i", 0);
F("%i");
return 0;
}
注意:似乎Clang将
-Wformat-security
滚动到-Wformat
。最后,我尚未测试
-Wformat-y2k
,但GCC将其定义为: