Pow не принимает второй параметр в качестве переменной на GCC - PullRequest
0 голосов
/ 19 мая 2010

pow не принимает второй параметр в качестве переменной на gcc

Следующий код отлично работает на VC ++ 10

// file test.cc
#include "stdafx.h"
#include <stdio.h>
#include <math.h>

int main(void)
{   
    double x = 10;
    int y = 20;
    printf("%f\n", pow(x, y));
    return 0;
}

Но следующий код не работает на gcc:

// test.c
#include <stdio.h>
#include <math.h>

int main(void)
{   
    double x = 10;
    int y = 20;
    printf("%f\n", pow(x, y)); // error here, says no such function, however when pass the second argument in `pow` for the code runs by gcc, It works fine!
    return 0;
}

Ответы [ 2 ]

6 голосов
/ 19 мая 2010

Вы ошибаетесь. Это не имеет ничего общего со вторым параметром.

В системах POSIXish pow() находится в libm, тогда как в системах win32ish это часть стандартной библиотеки C. Что означает вместо этого:

$ gcc program.c
/tmp/ccTw1gCA.o: In function `main':
program.c:(.text+0x30): undefined reference to `pow'

вам нужно сделать это:

$ gcc program.c -lm
2 голосов
/ 24 мая 2010

Может показаться, что второй параметр работает как константа, но не как переменная, потому что gcc имеет встроенную реализацию pow (). Если второй параметр является константой, он может использовать его, где, если это переменная, он обращается к функции glibc pow (). См:

http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Other-Builtins.html#Other-Builtins

Если вы передадите -fno-builtin в gcc, вы должны увидеть согласованное поведение - в этом случае сообщения об ошибках, независимо от того, что вы передаете в pow (). Как уже упоминали другие, когда вы используете что-либо из math.h, вам нужно связать с -lm .

...