为什么在linux下C语言中使用math.h中的公式编译时就要加参数-lm, windows中却不要?
天蓬老师
天蓬老师 2017-04-17 13:10:29
0
3
777

我用的程序

#include<stdio.h>
#include<math.h>
#include<sys/time.h>
int main()
{
    struct timeval start,end;
    gettimeofday(&start,NULL);
    long long i;
    double temp;
    for(i=0;i<10000000;i++)
    {
        temp=sqrt(i);
    }
    gettimeofday(&end,NULL);
    long timeuse =1000000 * ( end.tv_sec - start.tv_sec )  \
    + end.tv_usec - start.tv_usec;
    printf("\ntime=%f\n",timeuse /1000000.0);
    return 0;
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
刘奇

gcc是个编译器。。和cl.exe是一个级别的。
顶多就能让你的sqrt(4);直接优化成数字2,
例如这个情况就不用-lm

C#include<stdio.h>
int main(){
printf("%d",(int)sqrt(4));
}

不能只能处理相关的链接库问题,
毕竟谁都不知道到底程序员会不会自己手动写了个libm.so。

凡是用到的动态链接库都得自己写-l参数,
例如这个情况下默认就不会直接把sqrt(4)优化成(double)2

C#include<stdio.h>
int main(){
int i=4;
printf("%d",(int)sqrt(i));
}
刘奇

如果真是这样的话,那么就说明windows编译器中默认包含了mathlib了

洪涛

手边没有VC++编译器,应该是已经合并到msvcrt里了,跟thread一样,linux下还要-lpthread,VC就不用了。
http://blogs.msdn.com/b/vcblog/archive/2013/07/19/c99-library-support-in-visual-studio-2013.aspx

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板