задание параметров в математическую функцию - PullRequest
0 голосов
/ 15 мая 2018

Если я вызываю в C, математическая функция `" trunc "в математической библиотеке определяется как:

extern double trunc _PARAMS((double));

и в моем главном файле это называется:

int i = (int)trunc(2.5);

Работает нормально, проблем нет. Но если я попытаюсь пройти пассивно, например:

double d = 2.5;
int i = (int)trunc(d);

Это не сработает?!? В моем микропроцессоре STM32F4 IDE он переходит в режим отладчика в:

 Infinite_Loop:
 b  Infinite_Loop

и он застрял там. Я также меняю double и пробую float, int, unit8_t, ... никто не работает. Также другие математические функции будут работать нормально, так как я их называю так:

i =  sin(1);
i =  cos(1);

Но он будет таким же, если будет вызван так:

int a = 1;
i = sin(a);
i = cos(a);

Я выполняю этот код на микропроцессоре STM32F4 Discovery, в IDE используется Eclipse Ac6.

1 Ответ

0 голосов
/ 15 мая 2018

Если вы ссылаетесь на справочную страницу для trunc(), вы должны заметить, что она говорит:

Ссылка с -lm

Итак,убедитесь, что вы связываетесь с -lm.

Во-вторых, когда синопсис говорит double trunc(double x);, нет смысла пробовать его с другими типами данных.

Если вы хотите попробоватьс другими типами данных, то вы должны искать эти варианты:

float truncf(float x);
long double truncl(long double x);

Тестовый код:

#include<stdio.h>
#include<math.h>     

int main(void)
{
    // using trunc function which return
    // Truncated value of the input 
    double d = 2.7;
    printf(" Truncated value is %d \n", (int)trunc(d)); 

    return 0;
}

Это сгенерировало вывод:

 Truncated value is 2

И это былоскомпилированный с gcc версии 5.3.0

Когда я компилирую тот же код gcc версии 7.2.0 без опции -lm, я получаю следующее предупреждение:

undefined reference to `trunc'
error: ld returned 1 exit status
...