英語版
このページの英語版を見る

dmd.chkformat

printfscanf の引数をformat の文字列と照合する。
Authors:

ソース chkformat.d

ドキュメンテーション https://dlang.org/phobos/dmd_chkformat.html

bool checkPrintfFormat(const ref Loc loc, scope const char[] format, scope Expression[] args, bool isVa_list, ErrorSink eSink);
printfフォーマット文字列の引数が、その文字列と互換性があることを確認する。 をチェックする。互換性がない場合はエラーを出す。
printfのC99仕様に従う。
互換性については、厳格というよりむしろ寛大な見方をする。 例えば、符号なし値を符号付き指定子でフォーマットすることができる。
診断された非互換性は以下の通りである:
  1. 引数のズレを引き起こす互換性のないサイズ
  2. ポインタでない引数をディファレンシングする
  3. 引数の数が足りない
  4. 構造体引数
  5. 配列とスライス引数
  6. s 、ポインタ以外の引数を指定する。
  7. 非標準フォーマット
  8. C99での未定義の動作:
C標準では、余分な引数は無視される。
引数や書式文字列を修正しようとはしない。
Parameters:
Loc loc エラーメッセージの場所
char[] format フォーマット文字列
Expression[] args フォーマット文字列とマッチする引数
bool isVa_list v 関数の場合(フォーマットチェックのみ)
ErrorSink eSink エラーメッセージの場所
Returns:
true エラーが発生した場合
bool checkScanfFormat(const ref Loc loc, scope const char[] format, scope Expression[] args, bool isVa_list, ErrorSink eSink);
scanfフォーマット文字列の引数が、その文字列と互換性があるかチェックする。 チェックする。互換性がない場合はエラーを出す。
scanf の C99 仕様に従う。
互換性については、厳密というよりむしろ寛大な見方をする。 例えば、符号なし値を符号付き指定子でフォーマットすることができる。
診断された非互換性は以下の通りである:
  1. 引数のズレを引き起こす互換性のないサイズ
  2. ポインタでない引数をディファレンシングする
  3. 引数の数が足りない
  4. 構造体引数
  5. 配列とスライス引数
  6. 非標準フォーマット
  7. C99による未定義の動作:
C標準では、余分な引数は無視される。
引数や書式文字列を修正しようとはしない。
Parameters:
Loc loc エラーメッセージの場所
char[] format フォーマット文字列
Expression[] args フォーマット文字列にマッチする引数
bool isVa_list v 関数の場合(フォーマットチェックのみ)
ErrorSink eSink エラーメッセージの場所
Returns:
true エラーが発生した場合