关于c++中y1,y0等变量名冲突问题

关于c++中y1,y0等变量名冲突问题

前言

今天在做题时,定义了一个名为y1的全局变量,运行后出现了意想不到的报错。

 error: 'int y1' redeclared as different kind of symbol
 int y1;
     ^~
In file included from c:mingwlibgccmingw328.2.0includec++cmath:45,
                 from test-y1.cpp:2:
c:mingwincludemath.h:273:24: note: previous declaration 'double y1(double)'
 _CRTIMP double __cdecl y1 (double);

分析

从描述可以看出,是出现了变量重复定义的错误,但是我仔细查看了代码并没有重复定义的变量,继续往下看报错提示发现,变量y1和“cmath”库中的y1产生了冲突,(震惊,变量还会和标准库中产生冲突。。。。。),后又去网上查了资料发现确实是存在这样的现像。打开math.h头文件在第269(可能多有不同)开始存在以下定义:

_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.cnblogs.com/LeafLove/p/13433559.html