找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4638|回复: 2

【C语言】难道VC6的C语言不能使用sinf,只能使用sin?

[复制链接]

1110

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24217 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
发表于 2014-5-4 15:46:15 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
我也在这里提个问题。因为貌似用sinf会遇到error LNK2001: unresolved external symbol _sinf
但是用sin就没有问题。
已经包含了<math.h>
用的单线程库。
是C语言,.c的后缀。
此外在用sinf的时候编译器曾输出一个警告:“sinf没有定义,假设其返回的是int”
也就是说没有定义?按F12可以看到sinf的定义,C++可以正常使用(后缀.cpp)但是C语言却有问题。
希望得到权威的解释。MSDN没有这方面的资料。

本帖被以下淘专辑推荐:

回复

使用道具 举报

307

主题

228

回帖

7333

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5583 个
贡献
253 次
宅之契约
0 份
在线时间
947 小时
注册时间
2014-1-25
发表于 2014-5-4 19:11:59 | 显示全部楼层
如果实在要纠结的话,看下vc6 sinf的实现源码,改成如下形式:
_inline float sinf(float _X)
{
        return ((float)sin((double)_X));
}
就可以编译了。。。

探索过程中发现C不支持inline但是支持_inline  

详细分析如下:
打开math.h找到:
#ifndef __cplusplus//C支持函数
#define acosl(x)    ((long double)acos((double)(x)))
#define asinl(x)    ((long double)asin((double)(x)))
#define atanl(x)    ((long double)atan((double)(x)))
#define atan2l(x,y) ((long double)atan2((double)(x), (double)(y)))
#define _cabsl      _cabs
#define ceill(x)    ((long double)ceil((double)(x)))
#define cosl(x)     ((long double)cos((double)(x)))
#define coshl(x)    ((long double)cosh((double)(x)))
#define expl(x)     ((long double)exp((double)(x)))
#define fabsl(x)    ((long double)fabs((double)(x)))
#define floorl(x)   ((long double)floor((double)(x)))
#define fmodl(x,y)  ((long double)fmod((double)(x), (double)(y))
.........................
#define tanl(x)     ((long double)tan((double)(x)))
#define tanhl(x)    ((long double)tanh((double)(x)))
#else   /* __cplusplus *///C++支持函数
inline long double acosl(long double _X)
        {return (acos((double)_X)); }
inline long double asinl(long double _X)
        {return (asin((double)_X)); }
inline long double atanl(long double _X)
        {return (atan((double)_X)); }
inline long double atan2l(long double _X, long double _Y)
        {return (atan2((double)_X, (double)_Y)); }
。。。。。。。。
inline float modff(float _X, float *_Y)
        { double _Di, _Df = modf((double)_X, &_Di);
        *_Y = (float)_Di;
        return ((float)_Df); }
inline float powf(float _X, float _Y)
        {return ((float)pow((double)_X, (double)_Y)); }
inline float sinf(float _X)
        {return ((float)sin((double)_X)); }

inline float sinhf(float _X)
        {return ((float)sinh((double)_X)); }

也就是sinf在c里是没定义的
回复 赞! 1 靠! 0

使用道具 举报

1110

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24217 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
 楼主| 发表于 2015-1-21 02:45:40 | 显示全部楼层
其实是因为C语言没有inline,所以没有sinf
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-17 03:04 , Processed in 0.046643 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表