4

2 つのコード セグメントがありますが、どちらも 1 行を除いて同じです。1 つのプログラムはコンパイルに失敗し、もう 1 つのプログラムは成功します。cc を実行してコードをコンパイルするときに、数学ライブラリをリンクします。

機能を利用していdouble sin(double)ます。/usr/include/math.h を調べたところ、関数への参照が見つかりませんでしたが、明らかに math.h で定義されていsin()ます。

http://www.gnu.org/software/libc/manual/html_mono/libc.html#Trig-Functionsを参照してください。

このsin()関数は、私が提供する 1 つのコード セグメントでは機能しますが、他のコード セグメントでは機能しません。

//Successful program - demo1.c
#include <stdio.h>
#include <math.h>

int main (void)
{
    double input, sine_A; 
    input = 6.2830;
    sine_A = sin(6.2830);
    printf("sine=%f\n",sine_A);
    return 0;
}

これは失敗したプログラムです:

//Failed program - demo2.c
#include <stdio.h>
#include <math.h>

int main (void)
{
    double input, sine_A;
    input = 6.2830;
    sine_A = sin(input);
    printf("sine=%f\n",sine_A);
    return 0;
}

$ cc -lm demo2.c

/tmp/ccnpIWZd.o: In function `main':
demo2.c:(.text+0x1c): undefined reference to `sin'
collect2: ld returned 1 exit status

これにより、私は少しばかげている、または少なくとも、何年にもわたって何かを逃したと感じています。

4

2 に答える 2