14

プログラムで偽の警告を取り除こうとしています。Windows 64 では (Linux ではそのような警告はありません)、このステートメント:

printf("%llu",UINT64_MAX);

次の警告が生成されます。

warning: unknown conversion type character 'l' in format [-Wformat]|

出力は正しいように見え、警告は表示されません。私が見つけることができる最も関連性の高い gcc 関連の投稿は、2008 年からのこのバグ レポートhttp://gcc.gnu.org/bugzilla/show_bug.cgi?id=37768です。

それに従って正しく理解している場合、この警告は、内部で gcc が C99 に準拠していない MSVC printf を呼び出し、printf の unsigned long long 形式を理解できないという事実に起因します。同じページから提案された解決策は、gnu_printf と呼ばれるものを使用することです。私はそれをグーグルで検索しようとしましたが、含めるヘッダーが見つかりませんでした。

問題は、移植可能にするためにこれをどのように処理する必要があるかということです。正しくずさんな方法で警告を取り除きたいだけです。

4

2 に答える 2

8

おそらく既にご存じのことと思いますが、http://comments.gmane.org/gmane.comp.gnu.mingw.w64.general/4670(注: リンク切れです。インターネット アーカイブのコピーを参照してください)、

問題は、フォーマッタ幅指定子%llがすべての msvcrt-DLL バージョンでサポートされていないため、gcc がその使用について警告することです。下位互換性のある方法で msvcrt のフォーマッタで 64 ビット整数スカラー幅を指定する方法は、%I64.

于 2012-05-26T05:39:04.710 に答える