61709


タイトルのように、2点間の距離を求めるために以下のようにプログラムしました。

[code]

    #include <stdio.h>
    #include <math.h>
    
    #define sqr(n) ((n)*(n)) /*2乗値を求める*/
    /*===点の座標を表す構造体===*/
    typedef struct {
        double x; /*X座標*/
        double y; /*Y座標*/
    }  Point;
    /*---点paと点pbの距離を返す---*/
    double distance_of(Point pa,Point pb)
    {
        return sqrt(sqr(pa.x-pb.x)+sqr(pa.y-pb.y));
    }
    
    int main(void)
    {
        Point crnt,dest;
        printf("現在地のX座標: "); scanf("%lf",&crnt.x);
        printf("現在地のY座標: "); scanf("%lf",&crnt.y);
        printf("目的地のX座標: "); scanf("%lf",&dest.x);
        printf("目的地のY座標: "); scanf("%lf",&dest.y);
    
        printf("目的地までの距離は%.2fです。\n",distance_of(crnt,dest));
        return 0;
    
    }
    
[/code]

ですが、次のようなエラーが出てしまいました。

[code]

    /tmp/ccvgfvhz.o: 関数 `distance_of' 内:
    ex1108.c:(.text+0x9c): `sqrt' に対する定義されていない参照です
    collect2: error: ld returned 1 exit status
    
[/code]

そもそも、自分は `<math.h>` に平方根を計算する関数sqrtがあると認識していましたが  
それは誤認で、sqrt関数を定める必要があるということでしょうか。  
だとすれば、sqrt関数はどのように定めればよいでしょうか。


CC BY-SA 4.0
2019-12-23T12:00:34.203
61708
2019-12-23T12:51:15.233
2019-12-23T12:51:15.233
3060
36412
question
c
2点間の距離を求める


質問環境がわかりませんが、とりあえず[Linux用の`sqrt`のドキュメント](https://linuxjm.osdn.jp/html/LDP_man-
pages/man3/sqrt.3.html)には

> `-lm` でリンクする。

と説明されています。他の環境でもだいたい同じでコンパイル（正確にはリンク）時に`-lm`オプションを指定する必要があります。


CC BY-SA 4.0
2019-12-23T12:05:04.187
61709
2019-12-23T12:05:04.187
4236
61708
answer