Menu

printfでのconstの扱い

Anonymous
2012-09-14
2012-10-10
  • Anonymous

    Anonymous - 2012-09-14

    printf系の関数の書式付けに関する警告で,文字列とそれ以外のデータ型の扱いが異なっている気がします.
    下のようなソースコードでconstを付けて定義した文字列 foo の印字に対し,
    W,../mismatch.c,6,17,W0635,1 番目の変換指定子と、対応する実引数の型が合いません。
    が出力されます.

    #include <stdio.h>
    int main(void)
    {
      const char *const foo = "foo";
      const int bar = 0;
      (void) printf("%s\n", foo);
      (void) printf("%d\n", bar);
      return 0;
    }
    

    barもfooと同様にconstがついていますが,AdLintはこれについては警告しません.
    これは,期待された挙動でしょうか?

    AdLint 2.2.0,Ubuntu 12.04(64bit)で確認しました.

     
    • Yutaka Yanoh

      Yutaka Yanoh - 2012-10-09

      ご報告ありがとうございます。

      たしかに、ご指摘の通り %s 変換指定子の実引数チェックのみ、変数の変換可能性を判定する機能に不具合がありました。

      ある型のポインタ (T *) が他の型のポインタ (U *) へ自然に変換できるかを判定する際に、T -> U の変換可能性をもとに判定すべきところが、T と U が同一の型であることを判定していました。

      ポインタ間の変換可能性の判定を修正し、AdLint 2.4.6 としてリリースいたしました。

      お手数おかけしますが、AdLint 2.4.6 にアップデートしていただき、再度ご確認をお願いいたします。

       
  • Anonymous

    Anonymous - 2012-10-09

    AdLintを 2.4.6 に更新して,文字列のprintfが警告されなくなったことを確認しました.
    ご対応ありがとうございました.

     

Anonymous
Anonymous

Add attachments
Cancel