cmath 中的j0,j1,jn及y0,y1,yn的问题。疑重大‘BUG’


今天在刷题的时候,发现添加了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’,学习的乐趣就在于不断发现问题,并解决问题。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值