我在网络上看到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将其定义为:

    10-06 02:19