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


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

前言

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

 error: 'int y1' redeclared as different kind of symbol
 int y1;
     ^~
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cmath:45,
                 from test-y1.cpp:2:
c:\mingw\include\math.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);

所以在全局作用域中以上变量名均不可使用。

具体原因可自行百度。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM