今天在刷题的时候,发现添加了cmath头文件后y1不被定义的问题,久久不能解决,
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
cout<<y0<<","<<y1<<","<<yn<<endl;//1,1,1
cout<<j0<<","<<j1<<","<<jn<<endl;//1,1,1
return 0;
}
查看源代码发现其间有定义(math.h的254行开始),但菜鸟不知道其含义,网上不知有大神能否解释此问题。
#if !defined (_NO_OLDNAMES)
_CRTIMP double __cdecl j0 (double);
_CRTIMP double __cdecl j1 (double);
_CRTIMP double __cdecl jn (int, double);
_CRTIMP double __cdecl y0 (double);
_CRTIMP double __cdecl y1 (double);
_CRTIMP double __cdecl yn (int, double);
此问题已解决.https://www.zhihu.com/question/52901649
此问题已解决,这不是标准C里面有的函数,是glibc里面的私货。简单地说,这些函数是用于求两种Bessel函数的值。具体用于可见glib的文档。
难道此问题就不能解决了吗?
NO! 只要不将其定义成全局变量就可以了,原本想定义成全局变量,偷下懒,少写点代码,但却发现了这个‘BUG’,学习的乐趣就在于不断发现问题,并解决问题。