0xAA55 发表于 2014-5-4 15:46:15

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

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

元始天尊 发表于 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里是没定义的

0xAA55 发表于 2015-1-21 02:45:40

其实是因为C语言没有inline,所以没有sinf
页: [1]
查看完整版本: 【C语言】难道VC6的C语言不能使用sinf,只能使用sin?