Menu

math.hのインクルード

Anonymous
2012-09-14
2012-09-24
  • Anonymous

    Anonymous - 2012-09-14

    お世話になっております.

    AdLintでおかしな現象に遭遇しました.
    確かにmath.hをインクルードしているのですが,math.hによって宣言されるはずの関数が見つからないと警告が出ます.

    W0109,この関数の宣言が見つかりません。省略されたものとみなし、`extern int sqrt()' を挿入します。

    例えば下のようなコードで発生します.

    #include <math.h>
    
    int main(void)
    {
      const double len2 = 1.0;
      double length = sqrt(len2);
      return 0;
    }
    

    AdLint 2.2.0,Ubuntu 12.04(64bit)で確認しました.
    この環境に起因するものでしょうか.何かの定数が定義されていないなどの.

     
    • Yutaka Yanoh

      Yutaka Yanoh - 2012-09-21

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

      AdLint のプリプロセッサの不具合でした。

      関数形式マクロに空の実引数を指定し、マクロ内部で対応する仮引数に ## 演算子が適用された場合に、プリプロセス結果が不正となっておりました。
      この問題により、math.h 内で sqrt 関数のプロトタイプ宣言に余計なトークンが混じってしまい、ご報告いただいた現象が発生していました。

      この不具合を AdLint 2.4.0 にて修正いたしました。

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

       
  • Anonymous

    Anonymous - 2012-09-22

    原因の調査とご対応ありがとうございます.
    AdLint 2.4.0 で問題が再現しないことを確認しました.

     

Anonymous
Anonymous

Add attachments
Cancel