printfのフォーマッタ
printf 関数は、 _Printf というフォーマッタを使用します。フルバージョンのフォーマッタはサイズが非常に大きく、多くの組み込みアプリケーションで不要な機能が用意されています。メモリの消費を減らすため、3つのより小さい代替バージョンも用意されています。wprintf派生形は影響を受けない点に注意してください。
以下の表に、各種フォーマッタの機能の概要を示します。
フォーマット機能 | 極小 | 小/ SmallNoMb† | 大/ LargeNoMb† | Full/ FullNoMb† |
|---|---|---|---|---|
基本指定子 | Yes | Yes | Yes | Yes |
マルチバイト文字サポート | No | Yes/No | Yes/No | Yes/No |
浮動小数点数指定子 | No | No | No | Yes |
浮動小数点数指定子 | No | No | Yes | Yes |
変換指定子 | No | No | Yes | Yes |
フォーマットフラグ | No | Yes | Yes | Yes |
サイズ修飾子 | No | Yes | Yes | Yes |
フィールド幅、精度( | No | Yes | Yes | Yes |
| No | No | Yes | Yes |
| No | No | No | Yes |
† NoMbは、マルチバイトなしという意味です。
フォーマット文字列が文字列リテラルの場合、コンパイラはprintfへの直接の呼び出しでどのフォーマット機能が必要かを自動的に検出することができます。この情報はリンカに渡され、すべてのモジュールからの情報と組み合わせてアプリケーションに適切なフォーマッタが選ばれます。ただし、フォーマット文字列が変数であったり、呼び出しが関数ポインタを介した間接的なものの場合、コンパイラは解析を実行できず、リンカはフルのフォーマッタを選択することになります。この場合、自動的に選択されたprintfフォーマッタをオーバライドすることをお勧めします。
IDE で自動的に選択された printf フォーマッタをオーバライドするには、以下の手順に従います。[プロジェクト]>[オプション]>[一般オプション] を選択して[オプション]ダイアログボックスを開きます。
[ライブラリオプション]ページで、適切なフォーマッタを選択します。
以下のILINKコマンドラインオプションのいずれかを使用します。
‑‑redirect _Printf=_PrintfFull ‑‑redirect _Printf=_PrintfFullNoMb ‑‑redirect _Printf=_PrintfLarge ‑‑redirect _Printf=_PrintfLargeNoMb ‑‑redirect _Printf=_PrintfSmall ‑‑redirect _Printf=_PrintfSmallNoMb ‑‑redirect _Printf=_PrintfTiny ‑‑redirect _Printf=_PrintfTinyNoMb
コンパイラがマルチバイトサポートを認識しない場合は、それを有効にできます。
注意
[プロジェクト]>[オプション]>[一般オプション]>[ライブラリオプション1]>[マルチバイトサポートの有効化]を選択します。
危険
リンカオプション--printf_multibytesを使用します。
