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