5

Web 上で、Clang のオプションについての言及が数多く見られますが、-Wformat=2既知のもの (Xcode では「 /-Wformatへの Typecheck 呼び出しとしてリストされているものですが、現在はより多くの文字列書式設定 API をカバーしています)」と並んでいる場合もあります。printfscanf

  • これは何かをしますか?
  • もしそうなら、もしあれば、それは と何が違うの-Wformatですか?
  • 両方を持っていると便利ですか、それともどちらかがもう一方のスーパーセットですか?
4

1 に答える 1

6

あるとすれば、-Wformat との違いは何ですか?

これは GCC から借用したもので、置き換えに適したドロップになるように設計されています。GCC の説明:

-Wformat=2

-Wformat に加えて、-Wformat に含まれていないフォーマット チェックを有効にします。現在、`-Wformat -Wformat-nonliteral -Wformat-security -Wformat-y2k' と同等です。

それはあなたの質問のほとんどに答えます。

これは何かをしますか?

はい。次のプログラムは、の存在 (または不在) に応じて、さまざまな警告を発します-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 によって次のように定義されています。

-Wformat-y2k

-Wformat が指定されている場合、年が 2 桁しか表示されない可能性がある strftime フォーマットについても警告します。

于 2013-03-02T08:54:33.390 に答える