Skip to main content

IAR Embedded Workbench for Arm 9.70.x

scanfのフォーマッタ

このセクションの内容:

printf関数と同様に、scanfでも_Scanfという一般的なフォーマッタを使用します。フルバージョンのフォーマッタはサイズが非常に大きく、多くの組み込みアプリケーションで不要な機能が用意されています。メモリの消費を減らすため、2つのより小さい代替バージョンも用意されています。wscanfバージョンは影響を受けない点に注意してください。

以下の表に、各種フォーマッタの機能の概要を示します。

フォーマット機能

小/

SmallNoMb†

大/

LargeNoMb†

Full/ FullNoMb†

基本指定子cdiopsuXx%

Yes

Yes

Yes

マルチバイト文字サポート

Yes/No

Yes/No

Yes/No

浮動小数点数指定子aA

No

No

Yes

浮動小数点数指定子eEfFgG

No

No

Yes

変換指定子n

No

No

Yes

スキャン集合[]

No

Yes

Yes

代入抑止*

No

Yes

Yes

long longのサポート

No

No

Yes

wchar_tのサポート

No

No

Yes

表73 scanfのフォーマッタ 


NoMbは、マルチバイトなしという意味です。

フォーマット文字列が文字列リテラルの場合、コンパイラはscanfへの直接の呼び出しでどのフォーマット機能が必要かを自動的に検出することができます。この情報はリンカに渡され、すべてのモジュールからの情報と組み合わせてアプリケーションに適切なフォーマッタが選ばれます。ただし、フォーマット文字列が変数であったり、呼び出しが関数ポインタを介した間接的なものの場合、コンパイラは解析を実行できず、リンカはフルのフォーマッタを選択することになります。この場合、自動的に選択されたscanfフォーマッタをオーバライドすることをお勧めします。

EWICO.pngIDE で手動により scanf フォーマッタを指定するには、以下の手順に従います。
  1. [プロジェクト]>[オプション]>[一般オプション] を選択して[オプション]ダイアログボックスを開きます。

  2. [ライブラリオプション]ページで、適切なフォーマッタを選択します。

CLICO.pngコマンドラインからの scanf フォーマッタを手動により指定するには、以下の手順に従います。
  • 以下のILINKコマンドラインオプションのいずれかを使用します。

    ‑‑redirect _Scanf=_ScanfFull
    ‑‑redirect _Scanf=_ScanfFullNoMb
    ‑‑redirect _Scanf=_ScanfLarge
    ‑‑redirect _Scanf=_ScanfLargeNoMb 
    ‑‑redirect _Scanf=_ScanfSmall
    ‑‑redirect _Scanf=_ScanfSmallNoMb 

コンパイラがマルチバイトサポートを認識しない場合は、それを有効にできます。

注意

[プロジェクト]>[オプション]>[一般オプション]>[ライブラリオプション1]>[マルチバイトサポートの有効化]を選択します。

危険

リンカオプション--scanf_multibytesを使用します。